校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 二叉树遍历
题目

叉树前序遍历的递归和非递归实现?

解答

二叉树顺序遍历分为先序、中序和后序三种,访问的路径是一样的,只是不同顺序,输出的处理是不一样的。用递归的思维非常好理解。
在笔试和面试里,非递归的实现是常考点,一定要掌握好这块。


先序遍历的思想:
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;

}

}

}

讲解见视频

C 0条回复 评论

帖子还没人回复快来抢沙发