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

Posted kykai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC 144. / 94. / 145. Binary Tree Preorder/ Inorder/ PostOrder Traversal相关的知识,希望对你有一定的参考价值。

题目描述

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 ;

 

 

以上是关于LC 144. / 94. / 145. Binary Tree Preorder/ Inorder/ PostOrder Traversal的主要内容,如果未能解决你的问题,请参考以下文章

leetcode(144,94,145,102)中迭代版的二叉树的前中后层级遍历

Leetcode:探索二叉树(递归方式,Leetcode144,94,145)

树相关

lc 145. Binary Tree Postorder Traversal

LeetCode JS实现 二叉树(前中后层序)遍历(递归迭代法)

LeetCode JS实现 二叉树(前中后层序)遍历(递归迭代法)