ICode9

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

LC 144. / 94. / 145. Binary Tree Preorder/ Inorder/ PostOrder Traversal

2019-10-02 23:58:02  阅读:179  来源: 互联网

标签:Binary 144 145 TreeNode vector result push NULL root


题目描述

144. Binary Tree Preorder Traversal 94. Binary Tree Inorder Traversal 145. Binary Tree Postorder Traversal

前序排列 :根-左-右

中序排列: 左-根-右

后序排列:左-右-根

 

参考答案

 1 // PreOrder
 2 /**
 3  * Definition for a binary tree node.
 4  * struct TreeNode {
 5  *     int val;
 6  *     TreeNode *left;
 7  *     TreeNode *right;
 8  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 9  * };
10  */
11 class Solution {
12 private:
13         vector<int> res;
14 
15 public:
16     vector<int> preorderTraversal(TreeNode* root) {
17         foo(root);
18         return res;
19     }
20     void foo(TreeNode* root){
21         if(root == NULL)
22             return;
23         
24         res.push_back(root->val);
25         foo(root->left);
26         foo(root->right);
27     }
28 };
29 
30 // InOrder
31 class Solution {
32 public:
33     vector<int> inorderTraversal(TreeNode* root) {
34         if(root == NULL){
35             return vector<int>();
36         }
37         vector<int> result; // 创建结果
38         stack<TreeNode *> s;// 创建堆栈
39         TreeNode *p = root; // 临时让p为root
40         // 寻找p最左边的node
41         while(p!=NULL){
42             s.push(p); // 从root开始,将左边的node推入stack 
43             p = p->left;// 更新p为左node
44         }
45         // s 为全是左节点的stack
46         // 对 s进行循环操作
47         while(!s.empty()){
48             // 将最最左边的,推入stack
49             p = s.top();
50             result.push_back(p->val);
51             s.pop(); // 自己消失了
52             // 然后观察这个的右边node
53             if(p->right != NULL){
54                 p = p->right;
55                 while(p!=NULL){ //观察node的左边
56                     s.push(p);
57                     p = p->left;
58                 }
59             }     
60         }
61         return result;
62     }
63 };
64 
65 // PostOrder
66 
67 class Solution {
68 public:
69     vector<int> postorderTraversal(TreeNode* root) {
70         if(root == NULL){
71             return vector<int>();
72         }
73         vector<int> result;
74         stack<TreeNode *> s;
75         
76         s.push(root);
77         while(!s.empty()){
78             TreeNode *temp = s.top();
79             result.push_back(temp->val);
80             s.pop();
81             if(temp->left!=NULL){
82                 s.push(temp->left);
83             }
84             if(temp->right!= NULL){
85                 s.push(temp->right);
86             }
87         }
88         reverse(result.begin(), result.end());
89         return result;
90         
91     }
92 };

 

 

标签:Binary,144,145,TreeNode,vector,result,push,NULL,root
来源: https://www.cnblogs.com/kykai/p/11618819.html

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

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

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

ICode9版权所有