数据结构(七十三)
学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。
—— 重建二叉树 ——
1.题目描述
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例
Input:
preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output:
[3,9,20,null,null,15,7]
Input:
preorder = [-1], inorder = [-1]
Output:
[-1]
2.代码
c
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode *buildTree(int *preorder, int preorderSize, int *inorder, int inorderSize){
if (preorder == NULL || preorderSize == 0 || inorder == NULL || inorderSize == 0)
return NULL;
struct TreeNode *root = (struct TreeNode *)malloc(sizeof(struct TreeNode));
root->val = preorder[0]; // 前序遍历的第一个元素即为根节点值
int i;
for (i = 0; i < inorderSize; i++)
if (inorder[i] == preorder[0])
break;
root->left = buildTree(&preorder[1], i, &inorder[0], i);
root->right = buildTree(&preorder[i + 1], preorderSize - i - 1, &inorder[i + 1], preorderSize - i - 1);
return root;
}