1、题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。

  1. public class Solution
  2. {
  3. public TreeNode reConstructBinaryTree(int [] pre,int [] in)
  4. {
  5. TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
  6. return root;
  7. }
  8. //前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
  9. private TreeNode reConstructBinaryTree(int [] pre,int startPre,int endPre,int [] in,int startIn,int endIn)
  10. {
  11. if(startPre>endPre||startIn>endIn)
  12. return null;
  13. TreeNode root=new TreeNode(pre[startPre]);
  14.  
  15. for(int i=startIn;i<=endIn;i++)
  16. if(in[i]==pre[startPre])
  17. {
  18. root.left=reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
  19. root.right=reConstructBinaryTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);
  20. }
  21.  
  22. return root;
  23. }
  24. }

2、Java创建二叉树:

  1. public class TreeTest
  2. {
  3. public static String[] str;
  4. public static int count;
  5. /**
  6. * 静态内部类,定义二叉树节点
  7. */
  8. static class TreeNode
  9. {
  10. public String data;
  11. TreeNode lchild;
  12. TreeNode rchild;
  13. public TreeNode(String x)
  14. {
  15. this.data = x;
  16. }
  17. }
  18. /**
  19. * 根据前序序列递归构建二叉树
  20. *
  21. * @return
  22. */
  23. public static TreeNode createBtree()
  24. {
  25. TreeNode root = null;
  26. if (count >= str.length || str[count++].equals("#"))
  27. {
  28. root = null;
  29. }
  30. else
  31. {
  32. root = new TreeNode(str[count - 1]);
  33. root.lchild = createBtree();
  34. root.rchild = createBtree();
  35. }
  36. return root;
  37. }
  38. /**
  39. * 前序遍历
  40. *
  41. * @param root
  42. */
  43. public static void preTraverse(TreeNode root)
  44. {
  45. if (root != null)
  46. {
  47. System.out.print(root.data + " ");
  48. preTraverse(root.lchild);
  49. preTraverse(root.rchild);
  50. }
  51. }
  52. /**
  53. * 中序遍历
  54. *
  55. * @param root
  56. */
  57. public static void inTraverse(TreeNode root)
  58. {
  59. if (root != null)
  60. {
  61. inTraverse(root.lchild);
  62. System.out.print(root.data + " ");
  63. inTraverse(root.rchild);
  64. }
  65. }
  66. /**
  67. * 后序遍历
  68. *
  69. * @param root
  70. */
  71. public static void postTraverse(TreeNode root)
  72. {
  73. if (root != null)
  74. {
  75. postTraverse(root.lchild);
  76. postTraverse(root.rchild);
  77. System.out.print(root.data + " ");
  78. }
  79. }
  80.  
  81. public static void main(String args[])
  82. {
  83. Scanner cin = new Scanner(System.in);
  84. while (cin.hasNext())
  85. {
  86. String s = cin.nextLine();
  87. str = s.split(",");
  88. count = 0;
  89. TreeNode root = createBtree();
  90. // 前序遍历
  91. preTraverse(root);
  92. System.out.println();
  93. // 中序遍历
  94. inTraverse(root);
  95. System.out.println();
  96. // 后序遍历
  97. postTraverse(root);
  98. System.out.println();
  99. }
  100. cin.close();
  101. }
  102. }

剑指offer面试题6:重建二叉树的更多相关文章

  1. 剑指offer面试题6 重建二叉树(c)

  2. 剑指offer面试题6 重建二叉树(java)

    注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...

  3. 剑指Offer:面试题6——重建二叉树(java实现)

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

  4. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  5. 剑指Offer - 九度1385 - 重建二叉树

    剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的 ...

  6. 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)

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

  7. 剑指offer第二版-7.重建二叉树

    描述:输入某二叉树的前序遍历和中序遍历结果,重建该二叉树.假设前序遍历或中序遍历的结果中无重复的数字. 思路:前序遍历的第一个元素为根节点的值,据此将中序遍历数组拆分为左子树+root+右子树,前序遍 ...

  8. 剑指offer【04】- 重建二叉树(java)

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

  9. 剑指offer(4)重建二叉树

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

  10. 剑指offer——面试题8:二叉树的下一个节点

    // 面试题8:二叉树的下一个结点 // 题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? // 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针. ...

随机推荐

  1. sqlldr 学习总结1

    1.建表语法(采用scott中的emp表) create table emp(  empno    number(4) not null,  ename    varchar2(10),  job   ...

  2. 使用Photoshop实现雪花飘落的效果

    一.准备工作 软件环境:PhotoshopCS5 实验目的:雪花飘落的效果 二.实验步骤 1,打开素材图片并将原图层复制 2,在菜单栏内选择:滤镜->像素化->点状化,单元格大小选6  提 ...

  3. [转]Android--多线程之Handler

    原文:http://www.cnblogs.com/plokmju/p/android_Handler.html 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决 ...

  4. php模拟post提交请求与调用接口

    /** * 模拟post进行url请求 * @param string $url * @param string $param */ function request_post($url = '', ...

  5. 原理分析之一:从JDBC到Mybatis

    原理分析之一:从JDBC到Mybatis Mybatis学习(一)原生态的JDBC编程总结 -----系列 深入浅出MyBatis-快速入门

  6. PowerDesigner使用技巧(转载)

    1.如何打开PowerDesigner 快捷工具栏 paletteTools(工具栏)--> customsize toolbars(自定义工具栏)-->勾选 palette(调色板) 2 ...

  7. 非抢占式RCU中关于grace period的处理(限于方法)

    参考自:http://blog.csdn.net/junguo/article/details/8244530             Documentation/RCU/* TREE_RCU将所有的 ...

  8. JSP判断闰年

    闰年条件: 能被4整除但不能被100整除 能被400整除 <%@ page language="java" import="java.util.*" co ...

  9. 几个实用的sublime text 2的快捷键

    Sublime text快捷键 Sublime text 2是一款轻量.简洁.高效.跨平台的编辑器,他适合编写javascript,html,css,php,paython等等, 作为程序员,编码效率 ...

  10. SpringBoot------全局异常捕获

    1.添加异常类 package myshop.config; import javax.servlet.http.HttpServletRequest; import org.springframew ...