猿问

java二叉树与vector类的问题

书本题目要求遍历下面的二叉树,这个我是办到了,但是其中有些细节,我理解不了,请高手大神们帮忙指点一下!

我套用了书中例题的代码,我对这个代码一开始是表示怀疑的,但是一运行发现是对的。之后我就想看看到底是怎么运作的,代码和结果如下:

	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进行重新赋值或排序,怎么就变成这样了?

求指点!!!

迷失代码林
浏览 1312回答 0
0回答
随时随地看视频慕课网APP

相关分类

Java
我要回答