1.給定一個二叉樹,返回它的前序遍歷。
示例 :
輸入 : [1, null, 2, 3]
1
2
/
3
輸出:[1, 2, 3]
int treeSize(struct TreeNode* root)//求二叉樹中所有的結點
{
if (root == NULL)
return 0;
else
return treeSize(root->left) + treeSize(root->right) + 1;
}
void numpreorder(struct TreeNode* root, int* preorder, int* pnum)//依據先根再左再右的順序進行遍歷
{
if (root == NULL)
return;
preorder[*pnum] = root->val;
++(*pnum);
numpreorder(root->left, preorder, pnum);
numpreorder(root->right, preorder, pnum);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
*returnSize = treeSize(root);
int *preorder = (int*)malloc(*returnSize*sizeof(int));
int num = 0;
numpreorder(root, preorder, &num);
return preorder;
}
2.給定一個二叉樹,返回它的中序遍歷
輸入 : [1, null, 2, 3]
1
2
/
3
輸出:[1, 3, 2]
int treeSize(struct TreeNode* root)//求二叉樹的所有結點
{
if (root == NULL)
return 0;
else
return treeSize(root->left) + treeSize(root->right) + 1;
}
void inordernum(struct TreeNode* root, int* inorder, int* pnum)//中序遍歷先左再右再根
{
if (root == NULL)
return;
inordernum(root->left, inorder, pnum);
inorder[*pnum] = root->val;
++(*pnum);
inordernum(root->right, inorder, pnum);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
*returnSize = treeSize(root);
int* inorder = (int*)malloc((*returnSize)*sizeof(int));
int num = 0;
inordernum(root, inorder, &num);
return inorder;
}