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

LeetCode:N叉樹的後序遍歷【590】

LeetCode:N叉樹的後序遍歷【590】

題目描述

給定一個 N 叉樹,返回其節點值的後序遍歷

例如,給定一個 3叉樹 :

 

返回其後序遍歷: [5,6,3,2,4,1].

題目分析

  這道題有好幾個標籤,比如N叉樹、遞迴演算法、棧等等。我們使用棧來解決這個問題。

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

  如果我們按照這個順序列印的話,輸出的是[1,4,2,3,6,5]。如果我們把這個結果反轉後就是[5,6,3,2,4,1]就是結果。

Java題解

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val,List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
class Solution {
   public List<Integer> postorder(Node root) {
        Stack<Node> stack = new Stack<>();
        List<Integer> ans = new ArrayList<>();
        if(root==null)
            return ans;
        stack.push(root);
        while (!stack.isEmpty())
        {
            Node node = stack.pop();
            for(Node tmpNode:node.children)
                stack.push(tmpNode);
            ans.add(node.val);
        }
        Collections.reverse(ans);
        return ans ;
    }
}