解题思路:
递归遍历前序:根、左、右
递归遍历中序:左、根、右
递归遍历后序:左、右、根
要放到数组里面开辟空间,要知道树的大小,然后递归遍历数组下标用指针,因为递归返回时原下标不动,否则下标会继续增加,结果会发生错误。
前序遍历:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int SizeTree(struct TreeNode* root)
{
if(root == NULL)
return 0;
return SizeTree(root->left) + SizeTree(root->right) + 1;
}
void _preorderTraversal(struct TreeNode* root, int* a,int* i)
{
if(root == NULL)
return;
a[*i] = root->val;
++*i;
_preorderTraversal(root->left,a,i);
_preorderTraversal(root->right,a,i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int size = SizeTree(root);
int *a = (int*)malloc(sizeof(int)*size);
int i = 0;
_preorderTraversal(root,a,&i);
*returnSize = size;
return a;
}
中序遍历:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int TreeSize(struct TreeNode* root)
{
if(root == NULL)
return 0;
return TreeSize(root->left) + TreeSize(root->right) +1;
}
void _inorderTraversal(struct TreeNode* root,int* a,int* pi)
{
if(root == NULL)
return;
_inorderTraversal(root->left,a,pi);
a[*pi] = root->val;
++*pi;
_inorderTraversal(root->right,a,pi);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int size = TreeSize(root);
int* a = (int*)malloc(sizeof(int)*size);
int i = 0;
_inorderTraversal(root,a,&i);
*returnSize = size;
return a;
}
后序遍历:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int TreeSize(struct TreeNode* root)
{
if(root == NULL)
return 0;
return TreeSize(root->left)+TreeSize(root->right)+1;
}
void _postorderTraversal(struct TreeNode* root, int* a,int* i){
if(root == NULL)
return;
_postorderTraversal(root->left,a,i);
_postorderTraversal(root->right,a,i);
a[*i] = root->val;
++*i;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize){
int size = TreeSize(root);
int* a = (int*)malloc(sizeof(int)*size);
int i =0;
_postorderTraversal(root,a,&i);
*returnSize = size;
return a;
}