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;
}
来源:CSDN
作者:maryTime
链接:https://blog.csdn.net/maryfei/article/details/103629569