• 重建二叉树:


    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 }
  • 相关阅读:
    cg数据类型
    线程和流的历史遗留
    流的总结及小问题

    集合练习
    集合属性的整理
    集合
    整理
    面向对象中知识的薄弱点
    自己的小问题和数组常用的方法
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12885596.html
Copyright © 2020-2023  润新知