二叉樹的前中後序遍歷(遞迴&非遞迴)
阿新 • • 發佈:2018-12-21
中序遞迴:
class Solution { public: vector<int> res; vector<int> inorderTraversal(TreeNode * root) { inorder(root); return res; } void inorder(TreeNode * root){ if (root!=NULL){ inorder(root->left); res.push_back(root->val); inorder(root->right); } } };
中序非遞迴(使用棧):
class Solution { public: vector<int> inorderTraversal(TreeNode * root) { vector<int> res; if (root!=NULL){ stack<TreeNode *> s; TreeNode * this_node; this_node=root; while (!s.empty()||this_node) { if (this_node!=NULL) { s.push(this_node); this_node=this_node->left; } else { this_node=s.top(); res.push_back(this_node->val); this_node=this_node->right; s.pop(); } } } return res; } };
後序非遞迴:
class Solution { public: vector<int> postorderTraversal(TreeNode* root) { vector<int> res; if (root==NULL) return res; stack<TreeNode*> s; TreeNode* this_node=root; TreeNode* rec; while (!s.empty()||this_node) { if (this_node) { s.push(this_node); this_node=this_node->left; } else { this_node=s.top(); if (this_node->right&&this_node->right!=rec) { this_node=this_node->right; s.push(this_node); this_node=this_node->left; } else { res.push_back(this_node->val); rec=this_node; this_node=NULL; s.pop(); } } } return res; } };
前序非遞迴:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if (root!=NULL){
stack<TreeNode *> s;
TreeNode * this_node=root;
this_node=root;
while (!s.empty()||this_node)
{
if (this_node)
{
res.push_back(this_node->val);
s.push(this_node);
this_node=this_node->left;
}
else
{
this_node=s.top();
this_node=this_node->right;
s.pop();
}
}
}
return res;
}
};