首页 > 编程知识 正文

剑指offer第二版,java创建二叉树

时间:2023-05-06 00:32:48 阅读:19663 作者:4902

请输入有主题描述的二叉树的前相遍历和中相遍历,然后重建该二叉树。 假设输入的前扫描和中扫描结果不包含重复的数字。 例如,输入前相遍历序列{1、2、4、7、3、5、6、8}和中相遍历序列{4、7、2、1、5、3、8、6},二叉树将被重建并返回。

解题思想:递归思想!

在前序和中序遍历中可以确认唯一的二叉树,在前序中可以看到根节点为1,然后在中序中可以看到左子树为{ 4,7,2 },右子树为{ 5,3,8,6 }。 接着,将递归思想,{ 4,7,2 }中的4个作为根节点,进而分为左右的子树,对{ 5,3,8,6 }也进行同样的操作,直到扫描结束为止。

递归求解很容易,但在开始写代码的时候可能会被卡住。 该从哪里着手,需要传递多少参数,主题主要是决定左边的子树和右边的子树数组之间的范围,下一步判断谁是根谁是左谁是右。

或者,也可以使用Arrays.copyOfRange复制数组分别复制和递归左侧子树和右侧子树。

Java最优解公共类三项{ int val; 三烯左; 三烯灯光; treenode(intx ) { val=x; } publictreenodefindbinarytree (int [ ] pre,int preStart,int preEnd,int[] in,int inStart,int inEnd ) /符合前面的顺序和中的顺序for(intI=instart; i=inEnd; I ) if(in[I]==pre[prestart] )/I-startin是左侧子树的数量,root.left=findbinarytree(pre,preStart 1, I-in start point//I-startinstartpre (1:左边子树的下一个开始是右边子树root.right=findbinarytree(pre,i-inStart preStart 1 ) //重建主函数publictreenodereconstructbinarytree (int [ ] pre,int [] in ) ) treenode root=findbinarytree (pre,0,pre.lelenary ) } arrays.copyofrangeimportjava.util.*; 公共类解决方案{ publictreenodereconstructbinarytree (int [ ] pre,int [ ] in } { if (pre.length==0||pre.lene ) } treenode node=new treenode (pre [0]; for(intI=0; i in.length; I ) if(pre(0)==in(I ) ) node.left=reconstructbinarytree (arrays.copyofrange (pre,1,i 1 ),Arrays.copyofrange ) arrays.co Fran node.right=reconstructbinarytree (arrays.copyofrange (pre,i 1,pre.length ),arrays.copyofrange }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。