首页 > 其他 > 详细

重建二叉树:

时间:2020-05-13 23:48:42      阅读:66      评论:0      收藏:0      [点我收藏+]

1、问题:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

 

2、分析:

(1)根据当前的前序遍历和中序遍历确定头结点,并且将数组分割成左孩子集合和右孩子集合。

(2)根据1的规则进行递归处理。

(3)结束条件:数组长度为0,返回null;数组长度为2,进行判断——》两个数组的第一个元素相等,则第二个元素为右孩子节点,否则为左孩子节点。

 

3、代码参考:

 1 import java.util.Arrays;
 2 public class Solution {
 3     public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
 4         if(pre==null || pre.length==0) {
 5             return null;
 6         }
 7         TreeNode head = new TreeNode(pre[0]);
 8         if(pre.length==2) {
 9             TreeNode node = new TreeNode(pre[1]);
10             if(pre[1]!=in[1]) {
11                  
12                 head.left = node;
13             }else {
14                 head.right = node;
15             }
16             return head;
17         }
18          
19         int i= 0;
20         for(;i<in.length;i++) {
21             if(in[i]==pre[0]) break;
22         }
23         head.left = i==0?null:reConstructBinaryTree(Arrays.copyOfRange(pre, 1,i+1),Arrays.copyOfRange(in, 0, i));
24         head.right= i==pre.length-1?null:reConstructBinaryTree(Arrays.copyOfRange(pre, i+1,pre.length),Arrays.copyOfRange(in, i+1, in.length));
25          
26         return head;
27     }
28 }

 

重建二叉树:

原文:https://www.cnblogs.com/dream-flying/p/12885596.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!