【题目概要】
145. 二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
【思路分析】
- 利用迭代的方式方法,构建栈结构,循环将左子树存入栈中,flag设置判断是否此时处于右子树,flag = 0(代表右子树未能遍历,需要遍历)
【代码示例】
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int* postorderTraversal(struct TreeNode* root, int* returnSize){
struct TreeNode* p = root;
struct TreeNode* stack[1000];
int *re = (int*)malloc(sizeof(int)*1000);
*returnSize = 0;
int top = 0;
do
{
while(p)
{
stack[top++] = p;
p = p->left;
}
int flag = 1;
struct TreeNode *pt = NULL;
while(flag && top)
{
p = stack[top-1];
if(p->right == pt)
{
// p = stack[--top];
re[(*returnSize)++] = p->val;
pt = p;
top--;
}
else
{
flag = 0;
p = p->right;
}
}
}while(top);
return re;
}