
题目:
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
示例1:
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
解题代码:
struct TreeNode* buildATree(int* postorder, int* inorder, int len){
if(len == 0)
return NULL;
// 每次选中后序遍历数组中的最后一个数据作为根节点
int val = postorder[len - 1];
int index = 0;
// 找到根节点在中序遍历数组中的位置
while(inorder[index] != val)
index++;
struct TreeNode* node = malloc(sizeof(struct TreeNode));
node->val = val;
// 递归左树
node->left = buildATree(postorder, inorder, index);
// 递归右树
node->right = buildATree(postorder + index, inorder + index+1, len - index - 1);
return node;
}
struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize){
return buildATree(postorder, inorder, inorderSize);
}
LeetCode 105 从前序与中序遍历序列构造二叉树(C语言 递归)
当思路相同时,就变成了查找边界问题
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)