145. 二叉树的后序遍历(C语言)非递归

纵然是瞬间 提交于 2019-12-20 13:58:32
int* postorderTraversal(struct TreeNode* root, int* returnSize){
    int *ret=(int*)malloc(sizeof(int)*100);
    struct TreeNode** stack=(struct TreeNode**)malloc(sizeof(struct TreeNode*)*100);
    int top=-1;
    *returnSize=0;
    if(root)
    stack[++top]=root;
    struct TreeNode*cur=NULL,*pre=NULL;
    while(top!=-1){
        cur=stack[top];               //根节点入栈
        if((cur->left==NULL&&cur->right==NULL)||(pre&&(pre==cur->left||pre==cur->right)))
        {    //条件1:是叶子节点,则输出 或者条件2:是访问过的叶子节点的爸爸,则输出
             //这样保证了从最下方的只有三个元素子树开始输出
            ret[(*returnSize)++]=cur->val;             
            top--;
            pre=cur;
        }
        else{//开始这里else丢了,调了好久,逻辑不对
            if(cur->right){
            stack[++top]=cur->right;//右子节点入栈
            } 
            if(cur->left){
                stack[++top]=cur->left;//左子节点入栈
            }
        }      
    }
return ret;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!