LeetCode94,144,145. 二叉树前序中序后序--递归和非递归实现
code
class Solution {
public:
vector<int> res;
vector<int> preorderTraversal(TreeNode* root) {
if (root!=NULL) {
res.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
return res;
}
}
class Solution {
public:
vector<int> res;
vector<int> preorderTraversal(TreeNode* root) {
if(!root) return{};
stack<TreeNode*> s{ {root} };
while( !s.empty()) {
TreeNode* t = s.top();
s.pop();
res.push_back(t->val);
if(t->right) s.push(t->right);
if(t->left) s.push(t->left);
}
return res;
}
};
class Solution {
public:
vector<int> res;
vector<int> inorderTraversal(TreeNode* root) {
if(root!=NULL) {
inorderTraversal(root->left);
res.push_back(root->val);
inorderTraversal(root->right);
}
return res;
}
};
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode* p = root;
while ( p || ! s.empty() )
{
while (p)
{
s.push(p);
p = p->left;
}
p = s.top();
s.pop();
res.push_back(p->val);
p = p->right;
}
return res;
}
};
class Solution {
public:
vector<int> res;
vector<int> postorderTraversal(TreeNode* root) {
if(root!=NULL) {
postorderTraversal(root->left);
postorderTraversal(root->right);
res.push_back(root->val);
}
return res;
}
}
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
if (!root) return {};
vector<int> res;
stack<TreeNode*> s1,s2;
s1.push(root);
while (!s1.empty())
{
TreeNode *t = s1.top();
s1.pop();
s2.push(t);
if(t->left) s1.push(t->left);
if(t->right) s1.push(t->right);
}
while(!s2.empty())
{
res.push_back(s2.top()->val);
s2.pop();
}
return res;
}
}