不懂什么意思.有那种容易理解的图或者动图吗。头秃了请各位帮忙
应该是指数据结构的后序遍历的非递归实现吧,以二叉树为例:
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list= new ArrayList<>();
if(root==null){
return list;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
TreeNode prev=null;
while(!stack.empty()||cur!=null){
while(cur!=null){
stack.push(cur);
cur=cur.left;
}
TreeNode top=stack.peek();
if(top.right==null||top.right==prev){
stack.pop();
prev=top;
list.add(top.val);
}else{
cur=top.right;
}
}
return list;
}
}
思路:
在用非递归的方式实现后序遍历时,方法就是凑出来的,和中序遍历一样,就是想一想以怎样的入栈出栈的方式才能模拟出来中序遍历。
与中序遍历不一样的时,在后序遍历中,根是最后打印,在遍历完根的右树时,就要回到根,但是回到根时,如果不做判断标志,就会又回到右树,形成死循环。所以在这里使用 prev 标志,判断是否遍历了根的右树。