leetCode 145:Binary Tree Postorder Traversal

来源:互联网 发布:linux系统解压缩文件 编辑:程序博客网 时间:2024/04/30 21:51

//非递归的后序遍历二叉树:

//首先跳转到某个节点的最左儿子并把路径上经过的点压栈,如果最左儿子没有右儿子或者其右儿子已经被访问过了,那么我们遍历它。

/*重点在于当访问栈顶元素时,要看栈顶元素的右子树是否被访问过了,这就需要先把栈顶元素POP出来,判断是否可以遍历,如果不行,需要再把它压入栈中,并且指向其右子树*/

vector<int> postorderTraversal(TreeNode* root){    vector<int>res;    TreeNode*p=root,*q=root;    stack<TreeNode*>ms;    while(p){        for(;p->left;p=p->left)            ms.push(p);        while(p->right==0||p->right==q){//判断是否可以访问它            res.push_back(p->val);            q=p;            if(ms.empty())                return;            p=ms.top();//栈顶元素拿出来继续判断            ms.pop();        }        ms.push(p);//把它重新压栈        p=p->right;//访问它的右子树    }    return res;}


0 0
原创粉丝点击