LeetCode-590. N叉树的后序遍历

给定一个 N 叉树,返回其节点值的后序遍历

例如,给定一个 3叉树 :

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

说明: 递归法很简单,你可以使用迭代法完成此题吗?

虽然题目建议用迭代法,但是还是先用递归写一下:

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4 public:
 5     int val;
 6     vector<Node*> children;
 7 
 8     Node() {}
 9 
10     Node(int _val, vector<Node*> _children) {
11         val = _val;
12         children = _children;
13     }
14 };
15 */ 
16 class Solution { 
17     public: vector<int> postorder(Node* root) { 
18         vector<int> ans; 
19         if(root==NULL) return ans; 
20         postord(root,ans); 
21         return ans; 
22     } 
23     void postord(Node* root, vector<int> &ans) { 
24         if(root==NULL) return; 
25         for(int i=0;i<root->children.size();i++) { 
26             postord(root->children[i],ans); 
27         } 
28         ans.push_back(root->val); 
29     } 
30 };

迭代法:

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4 public:
 5     int val;
 6     vector<Node*> children;
 7 
 8     Node() {}
 9 
10     Node(int _val, vector<Node*> _children) {
11         val = _val;
12         children = _children;
13     }
14 };
15 */
16 class Solution {
17 public:
18     vector<int> postorder(Node* root) {
19         vector<int> ans; 
20         if(root==NULL) 
21             return ans; 
22         stack<Node*> s; 
23         s.push(root); 
24         Node* node; 
25         while(!s.empty()) { 
26             node=s.top(); 
27             s.pop(); 
28             for(int i=0;i<node->children.size();i++) { 
29                 s.push(node->children[i]); 
30             } 
31             ans.push_back(node->val); 
32         } 
33         reverse(ans.begin(),ans.end()); 
34         return ans;
35     }
36 };

没啥可说的,emmm……

猜你喜欢

转载自www.cnblogs.com/99xiaobei/p/9781718.html