1.给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,2,3]
/**
* 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 treeSize(struct TreeNode*root)
{
if(root == NULL)
{
return 0;
}
else
{
return treeSize(root->left)+treeSize(root->right)+1;
}
}
void _preorderTraversal(struct TreeNode*root,int* preorder,int* pindex)
{
if(root == NULL)
return;
preorder[*pindex] = root->val;
++(*pindex);
_preorderTraversal(root->left,preorder,pindex);
_preorderTraversal(root->right,preorder,pindex);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
*returnSize = treeSize(root);
int* preorder = (int*)malloc(*returnSize*sizeof(int));
int index = 0;
_preorderTraversal(root,preorder,&index);
return preorder;
}
2.给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,3,2]
/**
* 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 treeSize(struct TreeNode*root)
{
if(root == NULL)
{
return 0;
}
else
return treeSize(root->left)+treeSize(root->right)+1;
}
void _inorderTraversal(struct TreeNode* root,int* inorder,int *pindex)
{
if(root == NULL)
return;
_inorderTraversal(root->left,inorder,pindex);
inorder[*pindex] = root->val;
++(*pindex);
_inorderTraversal(root->right,inorder,pindex);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
*returnSize = treeSize(root);
int* inorder = (int*)malloc(*returnSize*sizeof(int));
int index = 0;
_inorderTraversal(root,inorder,&index);
return inorder;
}
3.给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [3,2,1]
/**
* 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 treeSize(struct TreeNode* root)
{
if(root == NULL)
{
return 0;
}
else
return treeSize(root->left)+treeSize(root->right)+1;
}
void _postorderTraversal(struct TreeNode* root,int* postorder,int* pindex)
{
if(root == NULL)
return;
_postorderTraversal(root->left,postorder,pindex);
_postorderTraversal(root->right,postorder,pindex);
postorder[*pindex] = root->val;
++(*pindex);
}
int* postorderTraversal(struct TreeNode* root, int* returnSize) {
*returnSize = treeSize(root);
int* postorder =(int*)malloc(*returnSize*sizeof(int));
int index = 0;
_postorderTraversal(root,postorder,&index);
return postorde;
}