给定两个整数数组 preorder
和 inorder
,其中 preorder
是二叉树的先序遍历, inorder
是同一棵树的中序遍历,请构造二叉树并返回其根节点。
思路一:递归
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
if(preorderSize==0)return NULL;
struct TreeNode* root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
int index;
root->val=preorder[0];
for(index=0;index<inorderSize;index++){
if(inorder[index]==preorder[0]){
break;
}
}
root->left=buildTree(preorder+1,index,inorder,index);
root->right=buildTree(preorder+index+1,preorderSize-index-1,inorder+index+1,preorderSize-index-1);
return root;
}
分析:
本题要通过二叉树的前序遍历和中序遍历来构造二叉树,根据前序遍历先输出根节点,再输出左子树,右子树,中序遍历先输出左子树,再输出根节点,右子树,可以锁定根节点,再利用递归构造二叉树的左右子树得到答案
总结:
本题考察二叉树构造问题,理解二叉树前序遍历和中序遍历再利用递归即可做出