145. 二叉树的后序遍历

package leetcode;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class demo_145 {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> list=new ArrayList<Integer>();
        Stack<TreeNode> stack=new Stack<TreeNode>();
        TreeNode node=root;
        TreeNode pre=null;
        while(node!=null||!stack.isEmpty()) {
            while(node!=null) {
                stack.push(node);
                node=node.left;
            }
            //判断当前节点是否第一次被访问
            node=stack.pop();
            //如果右节点为空或者当前节点是第二次被访问,则真正出栈
            if(node.right==null||pre==node.right) {
                list.add(node.val);
                pre=node;
                node=null;
            }else {
                //是第一次被访问,则将该节点再次入栈,访问其右节点
                stack.push(node);
                node=node.right;
            }
        }
        return list;
    }
}

 

posted on 2022-04-02 11:36  一仟零一夜丶  阅读(32)  评论(0)    收藏  举报