书本题目要求遍历下面的二叉树,这个我是办到了,但是其中有些细节,我理解不了,请高手大神们帮忙指点一下!
我套用了书中例题的代码,我对这个代码一开始是表示怀疑的,但是一运行发现是对的。之后我就想看看到底是怎么运作的,代码和结果如下:
public static Vector<TreeNode> rootMid(TreeNode root){//中序遍历 Vector<TreeNode> result=new Vector<TreeNode>(); if (root==null) { return result; } System.out.print("一"+root.nodevalue+","); Vector<TreeNode> lNodes=rootMid(root.lNode); System.out.print("二"+root.nodevalue+";"); result.addAll(lNodes); result.add(root); Vector<TreeNode> rNodes=rootMid(root.rNode); result.addAll(rNodes); return result; }
public class DateStructure { public static void main(String[] args) { TreeNode a,b,d,g,e,f,h; h=new TreeNode("h"); f=new TreeNode("f",h,null); e=new TreeNode("e",f,null); g=new TreeNode("g"); d=new TreeNode("d",g,null); b=new TreeNode("b",d,e); a=new TreeNode("a",b,null); Vector<TreeNode> result=new BinaryTree().rootMid(a); System.out.print("中序遍历结果:"); for(TreeNode tn:result){ System.out.print("、"+tn.nodevalue); } } }
运行后结果:
一a,一b,一d,一g,二g;二d;二b;一e,一f,一h,二h;二f;二e;二a;中序遍历结果:、g、d、b、h、f、e、a
首先“一”字开头的部分我是理解的,我觉得方法递归的顺序就是这样,但是遍历结果我理解不了,虽然我知道这个结果对题目要求来说是正确的,但是我的理解结果更倾向“一”这样的顺序,就算是栈那样的后来居上的添加方式,那“a”不也应该是排中间吗?另外“二”开头的字母,它这个输出方法和“一”是一样的,代码中并没有对root进行重新赋值或排序,怎么就变成这样了?
求指点!!!
相关分类