当前位置: 首页> 健康> 知识 > 中国网重庆_广西建设网官网办事大厅桂建云_百度竞价点击一次多少钱_在哪个网站可以免费做广告

中国网重庆_广西建设网官网办事大厅桂建云_百度竞价点击一次多少钱_在哪个网站可以免费做广告

时间:2025/7/11 17:41:35来源:https://blog.csdn.net/m0_73917165/article/details/142328250 浏览次数:0次
中国网重庆_广西建设网官网办事大厅桂建云_百度竞价点击一次多少钱_在哪个网站可以免费做广告

思路:递归分冶

这道题有点像根据数组构造二叉搜索树那道题,只不过,这里说了是根据两个数组进行判断。

一般我们在数据结构的题目当中都是靠试一试的想法做出这样判断二叉树的题,但是到了真正写程序的时候,思路就显然不知道怎么样了,因为我们需要让计算机知道大脑是怎么想的。

我们知道,前序遍历的第一个结点就是根节点,我们可以在对应的中序遍历列表中找到与其对应的元素的下标,这个下标的往左一直到结束,就是左子树的部分,往右就是右子树的部分,所以我们就初步判断了这样的结论。我们可以想,接下来的步骤是不是也可以按照这个想法进行呢?我们截取除根节点以外的左子树部分,然后再从中找出一个类根结点,这个结点就是这棵树的左子树的第一个结点,同理,右子树也能找到这样的一个类根节点。我们一直递归下去不就能够构造出一棵树了吗?

顺着这个思路,我们知道了:通过递归的方法,以及切割数组的方法来判断每次子树的根节点,然后相连接起来,合成的就是一颗完整的树了,其本质就在于找各个子树的根节点。

/*** 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) {if(preorder.length==0||inorder.length==0)return null;int index=0;for(int i=0;i<inorder.length;i++){if(preorder[0]==inorder[i]){index=i;break;}}TreeNode root=null; root=bianli(root,preorder,inorder);return root;}public TreeNode bianli(TreeNode t,int []a,int []b){if(a.length==0||b.length==0){return null;}TreeNode tmp=new TreeNode();for(int i=0;i<b.length;i++){if(a[0]==b[i]){tmp.val=b[i];t=tmp;int []a_l=Arrays.copyOfRange(a,1,i+1);int []a_r=Arrays.copyOfRange(a,i+1,a.length);int []b_l=Arrays.copyOfRange(b,0,i);int []b_r=Arrays.copyOfRange(b,i+1,b.length);t.left=bianli(t.left,a_l,b_l);t.right=bianli(t.right,a_r,b_r);}}return t;}
}

关键字:中国网重庆_广西建设网官网办事大厅桂建云_百度竞价点击一次多少钱_在哪个网站可以免费做广告

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: