LeetCode590

今天的题目如下

 

1.递归解法,思路较为简单

 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 
20 class Solution {
21     public List<Integer> postorder(Node root) {
22         List<Integer> ret = new ArrayList<>();
23         if(root == null){
24             return ret;
25         }
26         end(root,ret);
27         return ret;
28     }
29     public void end(Node root,List<Integer> ret){
30         
31         for(Node node : root.children){
32             end(node,ret);
33         }
34         ret.add(root.val);
35     }
36 }

2.使用栈进行模拟

 人生苦短,建议递归

 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 
20 class Solution {
21     public List<Integer> postorder(Node root) {
22         List<Integer> res = new ArrayList<Integer>();
23         if (root == null) {
24             return res;
25         }
26         Map<Node, Integer> map = new HashMap<Node, Integer>();
27         Deque<Node> stack = new ArrayDeque<Node>();
28         Node node = root;
29         while(node != null || !stack.isEmpty()){
30             while(node != null){
31                 stack.push(node);
32                 List<Node> children = node.children;
33                 if(children != null && children.size() > 0){
34                     map.put(node,0);
35                     node = children.get(0);
36                 }else{
37                     node = null;
38                 }
39             }
40             node = stack.peek();
41             int idx = map.getOrDefault(node , -1) + 1;
42             List<Node> children = node.children;
43             if(children != null && children.size() > idx){
44                 map.put(node,idx);
45                 node = children.get(idx);
46                 //stack.push(node);               
47             }else{
48                 res.add(node.val);
49                 stack.pop();
50                 map.remove(node);
51                 node = null;
52             }
53         }
54         return res;
55     }
56 }

还是建议递归

posted @ 2022-03-12 16:55  雨下_整夜  阅读(17)  评论(0编辑  收藏  举报