1. 程式人生 > >LeetCode:二叉樹的後序遍歷【145】

LeetCode:二叉樹的後序遍歷【145】

LeetCode:二叉樹的後序遍歷【145】

題目描述

給定一個二叉樹,返回它的 後序 遍歷。

示例:

輸入: [1,null,2,3]  
   1
    \
     2
    /
   3 

輸出: [3,2,1]

進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

題目分析

  這道題難度和N叉樹的後序遍歷是等同的,但是標註為困難。

  首先我們都知道,棧頂元素一般都是根元素,彈出根元素,加入根元素的左節點、右節點後,位於棧頂的是根元素的最右子節點,棧低的是根元素的最左子節點

  如果我們按照這個順序列印的話,輸出的是[1,2,3]

。如果我們把這個結果反轉後就是[3,2,1]就是結果。

Java題解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
          Stack<TreeNode> stack = new Stack<>();
        List<Integer> ans = new ArrayList<>();
        if(root==null)
            return ans;
        stack.push(root);
        while (!stack.isEmpty())
        {
            TreeNode node = stack.pop();
            if(node.left!=null)
                stack.add(node.left);
            if(node.right!=null)
                stack.add(node.right);
            ans.add(node.val);
        }
        Collections.reverse(ans);
        return ans ;
    }
}