Tree遍历

创建子文件夹new文章:hexo new post -p ./LeetCode学习/Tree前中后序遍历.md

前序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if(root == nullptr) return res;

stack<TreeNode*> stk;
TreeNode* node = root;

while(!stk.empty() || node != nullptr){
while(node != nullptr){
res.push_back(node->val);
stk.push(node);
node = node->left;
}
node = stk.top();
stk.pop();
node = node->right;

}
return res;
}
};

中序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> sta;

while(root!=nullptr || !sta.empty()){
while(root != nullptr){
sta.push(root);
root = root->left;
}

root = sta.top();
sta.pop();
res.push_back(root->val);
root = root->right;
}

return res;
}
};

后序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> stk;
TreeNode* node = root;
TreeNode* pre = nullptr;

while(!stk.empty()|| node!=nullptr){
while(node !=nullptr){
stk.push(node);
node= node->left;
}
node = stk.top();
stk.pop();
if(node->right==nullptr || pre == node->right){
res.push_back(node->val);
pre=node;
node=nullptr;
}
else{
stk.push(node);
node = node->right;
}
}
return res;
}
};