LeetCode-105:从前序与中序遍历序列构造二叉树
【摘要】
题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意: 你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3 / \ 9 20 / \ 15 7 ...
题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
-
3
-
/ \
-
9 20
-
/ \
-
15 7
思路分析:
废话不多说,直接来想思路,首先思考,根节点应该做什么。
类似上一题,我们肯定要想办法确定根节点的值,把根节点做出来,然后递归构造左右子树即可。(都是套路)
具体思路可参照公众号文章https://mp.weixin.qq.com/s/OlpaDhPDTJlQ5MJ8tsARlA
-
class Solution {
-
public TreeNode buildTree(int[] preorder, int[] inorder) {
-
return build(preorder,0,preorder.length-1,
-
inorder,0,inorder.length-1);
-
}
-
-
TreeNode build(int[] preorder,int prestart,int preend,
-
int[] inorder,int instart,int inend){
-
if(prestart>preend){
-
return null;
-
}
-
int rootVal=preorder[prestart];
-
int index=0;
-
for(int i=instart;i<=inend;i++){
-
if(inorder[i]==rootVal){
-
index=i;
-
break;
-
}
-
}
-
int leftsize=index-instart;
-
TreeNode root=new TreeNode(rootVal);
-
root.left=build(preorder,prestart+1,prestart+leftsize,
-
inorder,instart,index-1);
-
root.right=build(preorder,prestart+leftsize+1,preend,
-
inorder,index+1,inend);
-
-
return root;
-
-
}
-
}
文章来源: blog.csdn.net,作者:小小谢先生,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/xiewenrui1996/article/details/113943844
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)