LeetCode 590 N分木後順トラバーサルN進ツリー予約限定トラバーサルバイナリツリートラバーサル後順

ここでのオリジナルタイトルリンク:https://leetcode.com/problems/n-ary-tree-postorder-traversal/

トピック:

n分木を考えると、返却  後順の  そのノードの値のトラバーサルを。

進ツリー入力シリアル化は、それらのレベル順トラバーサルで表され、子供の各グループはヌル値(参照例)によって分離されています。

ファローアップ:

再帰的な解決策は、あなたが反復的にそれを行うことができ、簡単ですか?

例1:

入力:ルート= [1、NULL、3,2,4、NULL、5,6]
出力:[5,6,3,2,4,1]

例2:

入力:ルート= [1、NULL、2,3,4,5-、NULL、NULL、6,7、NULL、8、ヌル、9,10、NULL、NULL、11、NULL、12、NULL、13、NULL 、NULL、14]
出力:[2,6,14,11,7,3,12,8,4,13,9,10,5,1]

制約:

  • n進ツリーの高さに等しいかまたはそれ以下であります 1000
  • ノードの総数との間であります [0, 10^4]

ソリューション:

First add root to stack.

When popping up the top node in stack, add its value into res.

For each of its children. Add them to stack from left to right.

Eventually reverse the res.

Time Complexity: O(V+E).

Space: O(V).

AC Java:

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4     public int val;
 5     public List<Node> children;
 6 
 7     public Node() {}
 8 
 9     public Node(int _val) {
10         val = _val;
11     }
12 
13     public Node(int _val, List<Node> _children) {
14         val = _val;
15         children = _children;
16     }
17 };
18 */
19 class Solution {
20     public List<Integer> postorder(Node root) {
21         List<Integer> res = new ArrayList<>();
22         if(root == null){
23             return res;
24         }
25         
26         Stack<Node> stk = new Stack<>();
27         stk.push(root);
28         while(!stk.isEmpty()){
29             Node cur = stk.pop();
30             res.add(cur.val);
31             
32             for(Node child : cur.children){
33                 stk.push(child);    
34             }
35         }
36         
37         Collections.reverse(res);
38         return res;
39     }
40 }

类似N-ary Tree Preorder TraversalBinary Tree Postorder Traversal.

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/11940478.html