二叉树的先序遍历(非递归)
vector<int> FisrtRoot(TreeNode* root){
vector<int> result;
if(root == nullptr){
return result;
}
stack<TreeNode*> stack_r;
stack_r.push(root);
while(!stack_r.empty()){
TreeNode* temp = stack_r.top();
result.push_back(temp->val);
stack_r.pop();
if(temp->right){
stack_r.push(temp->right);
}
if(temp->left){
stack_r.push(temp->left);
}
}
return result;
}
中序遍历(非递归)
vector<int> MiddleSort(TreeNode* root){
vector<int> result;
if(root == nullptr){
return result;
}
stack<TreeNode*> stack_r;
while(root != nullptr || !stack_r.empty()){
if(root){
stack_r.push(root);
root = root->left;
}else{
TreeNode* temp = stack_r.pop();
result.push_back(temp->val);
root = temp->right;
}
}
return result;
}
后序遍历(非递归)
vector<int> behindSort(TreeNode* root){
vector<int> result;
if(root == nullptr) return result;
stack<TreeNode*> s1;
stack<TreeNode*> s2;
s1.push_back(root);
while(!s1.empty()){
TreeNode* temp = s1.top();
s2.push(temp);
s1.pop();
if(temp->left){
s1.push(temp->left);
}
if(temp->right){
s1.push(temp->right);
}
}
while(!s2.empty()){
result.push_back(s2.top());
s2.pop();
}
return result;
}