zoukankan      html  css  js  c++  java
  • 重建二叉树

    题目描述

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

    题解

    思路:前序遍历确定根节点,中序遍历确定是根节点的左孩子和右孩子。

    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
      TreeNode root = createBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
      return root;
    }
        
    public TreeNode createBinaryTree(int[] pre,int startPre,int endPre,int[] in,int startIn,int endIn) {
      if(startPre > endPre || startIn > endIn)
        return null;
      TreeNode root = new TreeNode(pre[startPre]);
      for(int i = startIn; i <= endIn; i++)
         if(pre[startPre] == in[i]) {
           root.left = createBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
           root.right = createBinaryTree(pre,endPre-endIn+i+1,endPre,in,i+1,endIn);
            break;
           }
      return root;
    }

    注意:在中序序列中找到根后,要确定前序序列中左子树节点数(statrPre+1,startPre+i-startIn),右子树节点数(endPre-(endIn-i)+1)

  • 相关阅读:
    I.MX6 Surfaceflinger 机制
    理解 Android Fragment
    RPi 2B DDNS 动态域名
    RPi 2B IPC webcam server
    理解 Android MVP 开发模式
    I.MX6 system.img unpack repack
    can't set android permissions
    VMware Ubuntu 共享文件夹
    解决oracle数据库连接不上的问题
    perfect-scrollbar示例
  • 原文地址:https://www.cnblogs.com/wisdomzhang/p/10483418.html
Copyright © 2011-2022 走看看