给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
-
思路分析:
后序遍历的顺序为:左-右-根,遍历的时候首先得考虑root是否为空,如果不为空,就先访问左结点,当左结点不存在(即为空时),再访问右节点,最后访问根节点。
-
具体代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int GetTreeSize(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
else
{
return GetTreeSize(root->left)+GetTreeSize(root->right)+1;
}
}
_postorderTraversal(struct TreeNode* root,int* array,int* pIndex)
{
if(root==NULL)
return;
_postorderTraversal(root->left,array,pIndex);
_postorderTraversal(root->right,array,pIndex);
array[*pIndex]=root->val;
(*pIndex)++;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize) {
*returnSize=GetTreeSize(root);
int* array=(int*)malloc((*returnSize)*sizeof(int));
int index=0;
_postorderTraversal(root,array,&index);
return array;
}