标签:后序遍历 adb none https img 存储 eve 使用 nod
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if(root==nullptr)
return res;
stack<TreeNode*> sta;
sta.push(root);
while(!sta.empty()){
TreeNode* tmp = sta.top();
sta.pop();
res.push_back(tmp->val);
if(tmp->right)
sta.push(tmp->right);
if(tmp->left)
sta.push(tmp->left);
}
return res;
}
};
//使用栈,把root结点放进去
//之后每次先push右子树、然后push左子树,每次把栈顶元素的值存到vector结果中
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
if(root==nullptr)
return res;
stack<TreeNode*> sta;
TreeNode* curr = root;
while(curr!=nullptr || !sta.empty()){
while(curr!=nullptr){
sta.push(curr);
curr = curr->left; //一直遍历左子树
}
TreeNode* tmp = sta.top();
sta.pop();
res.push_back(tmp->val); //每次仍然是从栈顶读取要存储的元素
curr = tmp->right;
}
return res;
}
};
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if(root==nullptr)
return res;
stack<TreeNode*> sta;
TreeNode* curr = root;
TreeNode* pre = nullptr;
while(curr!=nullptr || !sta.empty()){
while(curr!=nullptr){
sta.push(curr);
curr = curr->left; //此部分同中序一样,同样要先遍历左结点
}
TreeNode* tmp = sta.top();
if(tmp->right==nullptr || pre==tmp->right){ //没有左子树,或者右子树已经遍历过。则push当前跟结点
sta.pop();
res.push_back(tmp->val);
pre = tmp;
curr = nullptr;
}else{
curr = tmp->right;
pre = nullptr;
}
}
return res;
}
};
递归遍历的规律:无论何时push_back的都是当前的跟结点,遇到左右结点,都是继续递归遍历。
1 class Solution { 2 public: 3 vector<int> preorderTraversal(TreeNode* root) { 4 vector<int> res; 5 preorderTraversalCore( root, res); 6 return res; 7 } 8 9 void preorderTraversalCore(TreeNode* root,vector<int>& res){ 10 if(root==nullptr) 11 return; 12 res.push_back(root->val); 13 preorderTraversalCore( root->left, res); 14 preorderTraversalCore( root->right, res); 15 return; 16 } 17 };
1 class Solution { 2 public: 3 vector<int> inorderTraversal(TreeNode* root) { 4 vector<int> res; 5 inorderTraversalCore( root, res); 6 return res; 7 } 8 9 void inorderTraversalCore(TreeNode* root,vector<int>& res){ 10 if(root==nullptr) 11 return; 12 inorderTraversalCore( root->left, res); 13 res.push_back(root->val); 14 inorderTraversalCore( root->right, res); 15 return; 16 } 17 18 };
1 class Solution { 2 public: 3 vector<int> postorderTraversal(TreeNode* root) { 4 vector<int> res; 5 postorderTraversalCore( root, res); 6 return res; 7 } 8 9 void postorderTraversalCore(TreeNode* root,vector<int>& res){ 10 if(root==nullptr) 11 return; 12 postorderTraversalCore( root->left, res); 13 postorderTraversalCore( root->right, res); 14 res.push_back(root->val); 15 return; 16 } 17 18 };
标签:后序遍历 adb none https img 存储 eve 使用 nod
原文地址:https://www.cnblogs.com/GuoXinxin/p/11704809.html