ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【树】589. N叉树的前序遍历

2020-05-03 14:05:05  阅读:233  来源: 互联网

标签:Node 遍历 ve val int 前序 589 vector children


题目:

 

 

解法:

方法一:递归

 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) {
11         val = _val;
12     }
13 
14     Node(int _val, vector<Node*> _children) {
15         val = _val;
16         children = _children;
17     }
18 };
19 */
20 
21 class Solution {
22 public:
23 
24     // 第一种:递归  (这个和二叉树遍历一个道理,只是left right 用vector遍历下就行)
25     vector<int> preorder(Node* root) 
26     {
27         vector<int> ve;
28         if (!root) 
29         {
30             return ve;
31         }
32         recursivePerorder(root, ve);
33         return ve;
34     }
35 
36     void recursivePerorder(Node* node, vector<int>& ve) 
37     {
38         if (!node) 
39         {
40             return;
41         }
42         
43         ve.emplace_back(node->val);
44 
45         int size = node->children.size();
46 
47         for (int i=0; i<size; i++ ) 
48         {
49             Node *n = node->children[i];
50             if (n) 
51             {
52                 recursivePerorder(n,ve);
53             }
54         }
55     }
56 };

 

方法二:迭代

 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) {
11         val = _val;
12     }
13 
14     Node(int _val, vector<Node*> _children) {
15         val = _val;
16         children = _children;
17     }
18 };
19 */
20 
21 class Solution {
22 public:
23     // 第二种:迭代
24      vector<int> preorder(Node* root) 
25      {
26         vector<int> ve;
27         if (!root) 
28         {
29             return ve;
30         }
31        
32        stack<Node*> st;
33        st.push(root);
34        while(!st.empty()) 
35        {
36            Node *node = st.top();
37            st.pop();
38 
39             if (node) 
40             {
41                 ve.emplace_back(node->val);
42             }
43             else 
44             {
45                 continue;
46             }
47 
48             if (!node->children.empty()) 
49             {
50                 int size = node->children.size();
51                 for (int i=size-1; i>=0; i--) 
52                 { 
53                     // 注意:这里要倒序 stack LIFO
54                     Node *n = node->children[i];
55                     if (n) 
56                     {
57                         st.push(n);
58                     }
59                 }
60             }
61        }
62 
63         return ve;
64     }
65 
66 };

 

标签:Node,遍历,ve,val,int,前序,589,vector,children
来源: https://www.cnblogs.com/ocpc/p/12821768.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有