题目:

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

知识点:

  1. 树的基本知识,value、左右子节点;

注意:

代码实现:

  • 递归思想(暂时没有彻底理解,背写!!!)
public class Num07wang {public static void main(String[] args) {int preorder[] = {1, 2, 4, 7, 3, 5, 6, 8};int inorder[] = {4, 7, 2, 1, 5, 3, 8, 6};TreeNode treeNode = rebuildBinaryTree(preorder, inorder);System.out.println(treeNode);}/*** 重构二叉树* @param preorder* @param inorder* @return*/private static TreeNode rebuildBinaryTree(int[] preorder, int[] inorder) {if (preorder==null || inorder == null) {return null;}//核心算法TreeNode node = rebuildBinaryTreeCore(preorder, 0, preorder.length-1, inorder, 0,inorder.length-1);return node;}/*** 核心算法* @param preorder* @param i:前序初始index* @param j:前序终止index* @param inorder* @param k:中序初始index* @param l:中序终止index*/private static TreeNode rebuildBinaryTreeCore(int[] preorder, int preStartIndex, int preEndIndex, int[] inorder, int inStartIndex, int inEndIndex) {if(preStartIndex>preEndIndex || inStartIndex>inEndIndex) {return null;}//根据前序确定根节点TreeNode node = new TreeNode(preorder[preStartIndex]);//定位根节点再中序中的位置for(int i=inStartIndex; i<=inEndIndex; i++) {if(preorder[preStartIndex] ==inorder[i]) {//(i- inStartIndex)为中序排列中左子树的个数//左子树node.left = rebuildBinaryTreeCore(preorder, preStartIndex+1, preStartIndex+ (i-inStartIndex), inorder, inStartIndex, i-1);//右子树node.right = rebuildBinaryTreeCore(preorder, preStartIndex+1+(i-inStartIndex), preEndIndex, inorder, i+1, inEndIndex);}}return node;}public static class TreeNode{public int data;public TreeNode left;public TreeNode right;public TreeNode(int data) {this.data = data;}public String toString() {return "TreeNode [data=" + data + ", left=" + left + ", right=" + right+ "]";}}
}

剑指offer——7.重建二叉树相关推荐

  1. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  2. 剑指Offer #04 重建二叉树(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...

  3. [剑指offer]8.重建二叉树

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

  4. 剑指Offer系列 重建二叉树

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

  5. 剑指offer之重建二叉树

    1 问题 重建二叉树:给定二叉树的先序遍历(根左右)和中序(左中右)遍历结果,建立这棵二叉树.输入保证二叉树无重复结点 以先序{1, 2, 4, 7, 3, 5, 6, 8}和中序{4, 7, 2, ...

  6. 剑指 Offer 07. 重建二叉树【千字分析,三种方法】

    立志用最少的代码做最高效的表达 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,2 ...

  7. 【※ LeetCode 剑指 Offer 07. 重建二叉树(中等)】尚待完善

    题目: 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 来源:力扣(LeetCode) 链接:https://leetc ...

  8. 剑指offer 07重建二叉树(根据前序、中序遍历)草真tm难

    /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode ...

  9. 剑指 Offer 07. 重建二叉树

    ⭐简单说两句⭐ CSDN个人主页:后端小知识

最新文章

  1. 一句话木马使用方法总结
  2. Altium Designer 隐藏铺铜
  3. iOS本地化项目上传到gitHub
  4. httprunner框架学习总结
  5. favicon.ico--网站标题小图片二三事
  6. centos更换网卡后怎么更新配置_CentOS安装
  7. 解析docker中的环境变量使用和常见问题解决
  8. matlab2014a VS2010混合编程
  9. python多叉树_python中高效的四叉树实现
  10. JS实现星星评分系统
  11. 情人节适合送礼的数码好物有哪些?心意满满的数码好物清单
  12. 房贷要不要提前还款两种还款方式比较
  13. ansys经典界面分析工字钢_工字钢_ANSYS实例分析72道(含结果)
  14. seq2seq模型_推断速度达seq2seq模型的100倍,谷歌开源文本生成新方法LaserTagger
  15. 机器学习:03 Kaggle比赛 患者是否患糖尿病
  16. 当我真正开始爱自己——来自UOU的馈赠
  17. 79页智慧应急指挥平台1 6 N体系建设方案
  18. 电力行业服务器加固系统,系统加固
  19. 应届生嵌入式面试题总结——嵌入式基础
  20. 解决Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_V

热门文章

  1. HDU 1301 - Jungle Roads( Prim求最小生成树 )
  2. 17年第八届蓝桥杯省赛(C语言B组) 题解
  3. C#操作数据库,将其查查出来的记录条数显示在winform窗体中的方法之一
  4. Eclipse中使用Junit编写测试用例
  5. 使用UIActivityIndicatorView 和多线程
  6. 《编程能力基础》刷题笔记(41 题)
  7. 江苏大学矩阵论、数理统计期末考试复习
  8. 一辆汽车让你搞懂springmvc项目结构
  9. java参数传递时,究竟传递的是什么
  10. 软件_避免用chrome进行网站配置调试[博]