leetcode :二叉树的前中后序遍历

来源:互联网 发布:网络推广炒作 编辑:程序博客网 时间:2024/05/16 18:05
/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<int> preorderTraversal(TreeNode* root) {        vector<int> ret;        if(root==NULL)            return ret;        TreeNode* p;        stack<TreeNode*> s;        s.push(root);        while(!s.empty()){            p=s.top();            s.pop();            ret.push_back(p->val);            if(p->right!=NULL)                s.push(p->right);            if(p->left!=NULL)                s.push(p->left);        }        return ret;    }};

class Solution {public:    vector<int> preorderTraversal(TreeNode* root) {        vector<int> ret;        if(root==NULL)            return ret;        TreeNode* p=root;        stack<TreeNode*> s;        while(p!=NULL || !s.empty()){            while(p!=NULL){                s.push(p);                ret.push_back(p->val);                p=p->left;            }            if(!s.empty()){                p=s.top();                s.pop();                p=p->right;            }        }        return ret;    }};

class Solution {public:    vector<int> inorderTraversal(TreeNode* root) {        vector<int> ret;        if(root==NULL)            return ret;        stack<TreeNode *> s;        TreeNode* p=root;        while(p!=NULL || !s.empty()){            while(p!=NULL){                s.push(p);                p=p->left;            }            if(!s.empty()){                p=s.top();                s.pop();                ret.push_back(p->val);                p=p->right;            }        }        return ret;    }};

class Solution {public:    vector<int> postorderTraversal(TreeNode* root) {        vector<int> ret;        if(root==NULL)            return ret;        stack<TreeNode *> s;        s.push(root);        TreeNode* pre=NULL;//前一个输出结点        TreeNode* curr=root;        while(!s.empty()){            curr=s.top();            //  叶子结点 或者 它的子结点已经输出了(它有右结点因为先压右,那么curr->right==pre,否则curr->left==pre)            if( (curr->left==NULL && curr->right==NULL) || (pre != NULL) && (curr->left==pre || curr->right==pre) ){                ret.push_back(curr->val);                pre=curr;                s.pop();            }            else{                if(curr->right!=NULL)                    s.push(curr->right);                if(curr->left!=NULL)                    s.push(curr->left);            }        }    }};

层次遍历用队列:

http://blog.csdn.net/le119126/article/details/49070317(判断二叉树是否平衡、是否完全二叉树、是否二叉排序树)

0 0
原创粉丝点击