您的位置:首页 > 其它

[leet code ] 二叉树非递归前序 中序,后序遍历

2014-09-17 21:24 211 查看
//
//  main.cpp
//  binary tree preorder treversal
//
//  Created by zhukunjie on 14-8-15.
//  Copyright (c) 2014年 zhukunjie. All rights reserved.
//

#include <iostream>
#include <vector>
#include  <stack>
using namespace std;
struct  TreeNode {
    int val;
    TreeNode * left;
    TreeNode * right;
    TreeNode(int x): val(x),left(nullptr),right(nullptr){}
};
//前序
 vector<int> preorderTraversal(TreeNode* root)
{
    vector<int>res;
    stack<TreeNode*> tmp;
    if(root==NULL) return res;
    TreeNode *p=root;
    if(p) tmp.push(p);
    while (!tmp.empty()) {
        p=tmp.top();
        tmp.pop();
        res.push_back(p->val);
        if(p->right!=nullptr) tmp.push(p->right);
        if(p->left!=nullptr) tmp.push(p->left);
    }
    return  res;
}
//中序
vector<int> inorderTraversal(TreeNode *root) {
    vector<int>res;
    stack<TreeNode*> tmp;
    if(root==NULL) return res;
    TreeNode *p=root;
    while (!tmp.empty()||p!=nullptr) {
        if (p) {
            tmp.push(p);
            p=p->left;
        }
        else{
        p=tmp.top();
        tmp.pop();
        res.push_back(p->val);
        p=p->right;
        }
    }
    return res;
}
//后序
vector<int> postorderTraversal(TreeNode *root) {
    stack<TreeNode*> tmp;
    vector<int> result;
    TreeNode * Hasvisited;

    
    if(root == NULL) return result;
    while(root || !tmp.empty()){
        while(root){
            tmp.push(root);
            root = root->left;
        }
        root = tmp.top();

        
        if(root->right == NULL || Hasvisited == root->right){
            result.push_back(root->val);
            Hasvisited = root;
            tmp.pop();
            root = NULL;
        }
        else{
            root = root->right;
        }
    }

    
    return result;

    
}
int main(int argc, const char * argv[])
{
    TreeNode * a1=new TreeNode(2);
    TreeNode * a2=new TreeNode(3);
    TreeNode * a3=new TreeNode(1);
    a1->left=a2;
    a2->left=a3;
    inorderTraversal(a1);
    std::cout << "Hello, World!\n";
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐