剑指offer面试题6:重建二叉树
1、题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- public class Solution
- {
- public TreeNode reConstructBinaryTree(int [] pre,int [] in)
- {
- TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
- return root;
- }
- //前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
- private TreeNode reConstructBinaryTree(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(in[i]==pre[startPre])
- {
- root.left=reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1);
- root.right=reConstructBinaryTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);
- }
- return root;
- }
- }
2、Java创建二叉树:
- public class TreeTest
- {
- public static String[] str;
- public static int count;
- /**
- * 静态内部类,定义二叉树节点
- */
- static class TreeNode
- {
- public String data;
- TreeNode lchild;
- TreeNode rchild;
- public TreeNode(String x)
- {
- this.data = x;
- }
- }
- /**
- * 根据前序序列递归构建二叉树
- *
- * @return
- */
- public static TreeNode createBtree()
- {
- TreeNode root = null;
- if (count >= str.length || str[count++].equals("#"))
- {
- root = null;
- }
- else
- {
- root = new TreeNode(str[count - 1]);
- root.lchild = createBtree();
- root.rchild = createBtree();
- }
- return root;
- }
- /**
- * 前序遍历
- *
- * @param root
- */
- public static void preTraverse(TreeNode root)
- {
- if (root != null)
- {
- System.out.print(root.data + " ");
- preTraverse(root.lchild);
- preTraverse(root.rchild);
- }
- }
- /**
- * 中序遍历
- *
- * @param root
- */
- public static void inTraverse(TreeNode root)
- {
- if (root != null)
- {
- inTraverse(root.lchild);
- System.out.print(root.data + " ");
- inTraverse(root.rchild);
- }
- }
- /**
- * 后序遍历
- *
- * @param root
- */
- public static void postTraverse(TreeNode root)
- {
- if (root != null)
- {
- postTraverse(root.lchild);
- postTraverse(root.rchild);
- System.out.print(root.data + " ");
- }
- }
- public static void main(String args[])
- {
- Scanner cin = new Scanner(System.in);
- while (cin.hasNext())
- {
- String s = cin.nextLine();
- str = s.split(",");
- count = 0;
- TreeNode root = createBtree();
- // 前序遍历
- preTraverse(root);
- System.out.println();
- // 中序遍历
- inTraverse(root);
- System.out.println();
- // 后序遍历
- postTraverse(root);
- System.out.println();
- }
- cin.close();
- }
- }
剑指offer面试题6:重建二叉树的更多相关文章
- 剑指offer面试题6 重建二叉树(c)
- 剑指offer面试题6 重建二叉树(java)
注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...
- 剑指Offer:面试题6——重建二叉树(java实现)
问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不包含重复的数字. 例如: 输入:前序{1,2,4,7,3,5,6,8},中序{4,7,2,1 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- 剑指Offer - 九度1385 - 重建二叉树
剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的 ...
- 剑指offer_面试题6_重建二叉树(分解步骤,逐个击破)
题目:输入某二叉树的前序遍历和中序遍历的结果.请重建出该二叉树.如果输入的前序遍历和中序遍历的结果中都不含反复的数字. 比如:输入前序遍历 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7 ...
- 剑指offer第二版-7.重建二叉树
描述:输入某二叉树的前序遍历和中序遍历结果,重建该二叉树.假设前序遍历或中序遍历的结果中无重复的数字. 思路:前序遍历的第一个元素为根节点的值,据此将中序遍历数组拆分为左子树+root+右子树,前序遍 ...
- 剑指offer【04】- 重建二叉树(java)
题目:重建二叉树 考点:树 题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6, ...
- 剑指offer(4)重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 剑指offer——面试题8:二叉树的下一个节点
// 面试题8:二叉树的下一个结点 // 题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? // 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针. ...
随机推荐
- sqlldr 学习总结1
1.建表语法(采用scott中的emp表) create table emp( empno number(4) not null, ename varchar2(10), job ...
- 使用Photoshop实现雪花飘落的效果
一.准备工作 软件环境:PhotoshopCS5 实验目的:雪花飘落的效果 二.实验步骤 1,打开素材图片并将原图层复制 2,在菜单栏内选择:滤镜->像素化->点状化,单元格大小选6 提 ...
- [转]Android--多线程之Handler
原文:http://www.cnblogs.com/plokmju/p/android_Handler.html 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决 ...
- php模拟post提交请求与调用接口
/** * 模拟post进行url请求 * @param string $url * @param string $param */ function request_post($url = '', ...
- 原理分析之一:从JDBC到Mybatis
原理分析之一:从JDBC到Mybatis Mybatis学习(一)原生态的JDBC编程总结 -----系列 深入浅出MyBatis-快速入门
- PowerDesigner使用技巧(转载)
1.如何打开PowerDesigner 快捷工具栏 paletteTools(工具栏)--> customsize toolbars(自定义工具栏)-->勾选 palette(调色板) 2 ...
- 非抢占式RCU中关于grace period的处理(限于方法)
参考自:http://blog.csdn.net/junguo/article/details/8244530 Documentation/RCU/* TREE_RCU将所有的 ...
- JSP判断闰年
闰年条件: 能被4整除但不能被100整除 能被400整除 <%@ page language="java" import="java.util.*" co ...
- 几个实用的sublime text 2的快捷键
Sublime text快捷键 Sublime text 2是一款轻量.简洁.高效.跨平台的编辑器,他适合编写javascript,html,css,php,paython等等, 作为程序员,编码效率 ...
- SpringBoot------全局异常捕获
1.添加异常类 package myshop.config; import javax.servlet.http.HttpServletRequest; import org.springframew ...