解答
二叉树顺序遍历分为先序、中序和后序三种,访问的路径是一样的,只是不同顺序,输出的处理是不一样的。用递归的思维非常好理解。
在笔试和面试里,非递归的实现是常考点,一定要掌握好这块。
先序遍历的思想:
1、 遍历到每个结点后,先输出当前结点,
2 、再继续遍历其左孩子结点(重复1)、
3 、然后是右孩子结点(重复1)
递归代码实现如下:
public void preOrder(BTree root){
if(root != null) {
System.out.print(root.val +" ");
preOrder (root.left);
preOrder (root.right);
}
}
非递归实现如下:
public void preOrder(BTree root){
// 用来暂存节点的栈
Stack<BTree> treeNodeStack =new Stack<BTree>();
// 新建一个游标节点为根节点
BTree node= root;
// 当遍历到最后一个节点的时候,无论它的左右子树都为空,并且栈也为空
while (node!= null || !treeNodeStack.isEmpty()) {
while (node != null) {
System.out.print(node.val +" ");
treeNodeStack.push(node);
node = node.left; }
if (!treeNodeStack.isEmpty()) {
node = treeNodeStack.pop();
node = node.right;
}
}
}
讲解见视频
帖子还没人回复快来抢沙发