0
点赞
收藏
分享

微信扫一扫

2021-1-30-一个模板解决二叉树非递归遍历(前中后)


思想:

非递归遍历需要使用来作为存储树节点的容器,使用一个指针来作为判断,决定入栈还是出栈。

非递归遍历模板:

先序和中序

 public List<Integer> preAndInOrderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<>();
Stack<TreeNode> stack=new Stack<TreeNode>();
TreeNode node;
while (root!=null||!stack.isEmpty()){
if (root!=null){
stack.push(root);
// ret.add(root.val); 先序
root=root.left;
}else {
node=stack.pop();
// ret.add(node.val);中序
root=node.right;
}
}
return ret;
}

后序遍历

public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<>();
Stack<TreeNode> stack=new Stack<TreeNode>();
TreeNode node;
while (root!=null||!stack.isEmpty()){
if (root!=null){
stack.push(root);
ret.add(root.val);
root=root.right;
}else {
node=stack.pop();
root=node.left;
}
}
Collections.reverse(ret);
return ret;
}

灵感

灵感来源于使用栈的时候,无法保证出栈和入栈的时机。所以使用一个指针来配合使用。上述模板的意义在于根据指针是否为空,来决定入栈还是出栈。


举报

相关推荐

0 条评论