二叉树结点定义:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
二叉树先序遍历的非递归方法:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> result;
if(root==NULL){
return result;
}
stack<TreeNode*> nodeStack;
TreeNode *tmp=root;
while(tmp||!nodeStack.empty()){
while(tmp){
result.push_back(tmp->val);
nodeStack.push(tmp);
tmp=tmp->left;
}
tmp=nodeStack.top();
nodeStack.pop();
tmp=tmp->right;
}
return result;
}
二叉树中序遍历的非递归方法:
vector<int> inorderTraversal(TreeNode *root) {
vector<int> result;
if(root==NULL){
return result;
}
stack<TreeNode*> nodeStack;
TreeNode *tmp=root;
while(tmp||!nodeStack.empty()){
while(tmp){
nodeStack.push(tmp);
tmp=tmp->left;
}
tmp=nodeStack.top();
nodeStack.pop();
result.push_back(tmp->val);
tmp=tmp->right;
}
return result;
}
二叉树后序遍历的非递归方法:
vector<int> postorderTraversal(TreeNode *root) {
const int N=100;
vector<int> result;
if(root==NULL){
return result;
}
vector<int> flag(N);
stack<TreeNode*> nodeStack;
TreeNode *tmp=root;
while(tmp||!nodeStack.empty()){
while(tmp){
nodeStack.push(tmp);
flag[nodeStack.size()]=0;
tmp=tmp->left;
}
while(!nodeStack.empty()&&tmp[nodeStack.size()]){
tmp=nodeStack.top();
nodeStack.pop();
result.push_back(tmp);
}
if(!nodeStack.empty()){
tmp=nodeStack.top();
flag[nodeStack.size()]=1;
tmp=tmp->right;
}
}
return result;
}