失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > leetcode 105. 从前序与中序遍历序列构造二叉树

leetcode 105. 从前序与中序遍历序列构造二叉树

时间:2023-08-13 00:25:44

相关推荐

leetcode 105. 从前序与中序遍历序列构造二叉树

难度:中等

频次:68

题目:

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

解题思路:递归

注意:

**规律:**先序遍历的根节点在最前面,中序遍历的根节点在相对中间的地方所以只要每次都找到根节点,然后去掉根节点,把两个先序数组和中序数组都分别拆成2个数组然后用左边的两个数组对root.left使用递归就行,右边同理Arrays.copyOfRange(List,a,b)这个函数需要注意,函数命需要记住,一个s,然后O、R大写范围是[a,b)===》即不包括b

代码

/*** Definition for a binary tree node.* public class TreeNode {*int val;*TreeNode left;*TreeNode right;*TreeNode() {}*TreeNode(int val) { this.val = val; }*TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;*}* }*/class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {//如果数组都为null,则说明树为空===>递归结束条件//【可以理解到空节点说明这条递归路径结束】if(preorder.length==0&&inorder.length==0) return null;//先保存根节点===》每次递归真正有用的就是保存这个节点,剩下的都是递归TreeNode root=new TreeNode(preorder[0]);for(int i=0;i<inorder.length;i++){if(preorder[0]==inorder[i]){//前序遍历,root根节点在最前面,把这个去掉,所以是从1开始int[] pre1=Arrays.copyOfRange(preorder,1,i+1);int[] pre2=Arrays.copyOfRange(preorder,i+1,preorder.length);//中序遍历,root根节点在最中间,所以要把遍历到的这个i去掉,所以是到i[函数不包含到i]int[] in1=Arrays.copyOfRange(inorder,0,i);int[] in2=Arrays.copyOfRange(inorder,i+1,inorder.length);root.left=buildTree(pre1,in1);root.right=buildTree(pre2,in2);break;}}return root;}}

如果觉得《leetcode 105. 从前序与中序遍历序列构造二叉树》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。