zoukankan      html  css  js  c++  java
  • 剑指offer 4.重建二叉树

    4.重建二叉树

    题目

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

    思路

    这就和二叉树的性质相关了,由前序和中序可以确定一棵树,前序的第一个就是树的根,然后中序找到这个根,在前面的就是左子树,在后面的就是右子树。然后就先不管别的,直接深挖,左子树的前序和中序都有那就能得到左子树的根节点,一层一层,如果长度为0就不存在,为null。
    这里函数的输入是两个数组,递归的输入还是两个数组,所以截取数组计算,不然可以用索引值,效果一样。

    代码

      public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
        if (pre.length == 0 || in.length == 0) {
          return null;
        }
        TreeNode root = new TreeNode(pre[0]);
        for (int i = 0; i < in.length; i++) {
          if (pre[0] == in[i]) {
            root.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i + 1),
                Arrays.copyOfRange(in, 0, i));
            root.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i + 1, pre.length),
                Arrays.copyOfRange(in, i + 1, in.length));
          }
        }
        return root;
      }
    
  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/blogxjc/p/12367110.html
Copyright © 2011-2022 走看看