zoukankan      html  css  js  c++  java
  • [leedcode 145] Binary Tree Postorder Traversal

    Given a binary tree, return the postorder traversal of its nodes' values.

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3
    

    return [3,2,1].

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public List<Integer> postorderTraversal(TreeNode root) {
            //后序遍历和中序遍历不同,因为需要访问完左节点和右节点之后才能访问根节点,因此,保存记录时,需要判断一个节点是否是叶子节点,以及
            //他的孩子是否遍历过,此时使用mark做标记,表示子孩子已经遍历过。注意最后向栈内添加子节点的顺序,先push右节点,再push子节点
            List<Integer>res=new ArrayList<Integer>();
            if(root==null) return res;
            Stack<TreeNode> stack=new Stack<TreeNode>();
            stack.push(root);
            TreeNode mark=root; //代表已经访问的节点
            while(!stack.isEmpty()){
                TreeNode node=stack.peek();
                if(node.left==null&&node.right==null||node.left==mark||node.right==mark){
                    res.add(node.val);
                    mark=node;
                    stack.pop();
                }else{
                    if(node.right!=null){//////顺序
                        stack.push(node.right);
                    }
                    if(node.left!=null){
                        stack.push(node.left);
                    }
                }
            }
              return res;
        }
       /* List<Integer> res;
        public List<Integer> postorderTraversal(TreeNode root) {
            res=new ArrayList<Integer>();
            if(root==null) return res;
            getRes(root);
            return res;
        }
        public void getRes(TreeNode root){
            if(root==null) return;
            getRes(root.left);
            getRes(root.right);
            res.add(root.val);
        }*/
    }
  • 相关阅读:
    线性表
    数据结构绪论
    warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
    struct和typedef struct在c++中的用法
    struct和typedef struct在c语言中的用法
    GCC命令
    python list排序的两种方法及实例讲解
    Python随机数与随机字符串详解
    python处理Excel
    python3使用PyMysql连接mysql数据库
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4679868.html
Copyright © 2011-2022 走看看