已知二叉树前序和中序,算法写出后续遍历的结果
时间:2020-03-26
本文章向大家介绍已知二叉树前序和中序,算法写出后续遍历的结果,主要包括已知二叉树前序和中序,算法写出后续遍历的结果使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 package com.S; 2 3 import java.util.Arrays; 4 5 public class Tree { 6 7 int data; 8 Tree left; 9 Tree right; 10 11 public Tree(int data){ 12 this.data = data; 13 } 14 public Tree(int data, Tree left, Tree right){ 15 this.data = data; 16 this.left = left; 17 this.right = right; 18 } 19 20 public void afterShow(){ 21 //左 22 if(left != null){ 23 left.afterShow(); 24 } 25 //右 26 if(right != null){ 27 right.afterShow(); 28 } 29 //自己 30 System.out.println(data); 31 } 32 33 /** 34 * 重建树 35 * @param preOrders 树的前序 36 * @param inOrders 树的中序 37 * @return 38 */ 39 public Tree buildTree(int[] preOrders, int[] inOrders){ 40 //递归截止条件,有一个为空,就说明没有子节点了 41 if(preOrders.length == 0 || inOrders.length == 0){ 42 return null; 43 } 44 //每轮的根节点就是preOrders的第一个 45 Tree root = new Tree(preOrders[0]); 46 //根据inOrders查找到根节点的下标,返回index 47 int index = search(inOrders, root.data); 48 if(index >= 0){ 49 //Arrays.copyOfRange(preOrders, 1, index+1),截取preOrders,从1到index+1,前包后不包 50 root.left = buildTree(Arrays.copyOfRange(preOrders, 1, index+1), Arrays.copyOfRange(inOrders, 0, index)); 51 root.right = buildTree(Arrays.copyOfRange(preOrders, index+1, preOrders.length), Arrays.copyOfRange(inOrders, index+1, inOrders.length)); 52 } 53 return root; 54 } 55 56 /** 57 * 根据inOrders查找根节点的下标,目的是找到左子树和右子树的分界 58 * @param inOrders 中序 59 * @param data 根节点 60 * @return 61 */ 62 public int search(int[] inOrders, int data){ 63 for (int i = 0; i < inOrders.length; i++) { 64 if(data == inOrders[i]){ 65 return i; 66 } 67 } 68 return -1; 69 } 70 71 72 public static void main(String[] args) { 73 int[] preOrders = {1,2,4,5,3,6,7}; 74 int[] inOrders = {4,2,5,1,6,3,7}; 75 new Tree(preOrders[0]).buildTree(preOrders, inOrders).afterShow(); 76 } 77 78 }
原文地址:https://www.cnblogs.com/motorye/p/12574331.html
- POJ3683 Priest John's Busiest Day(2-SAT)
- javascript 面向对象(实现继承的几种方式)
- Base64 的 JavaScript 实现 js-base64
- HTTP请求详解
- 漫谈Java IO之 NIO那些事儿
- 1593: [Usaco2008 Feb]Hotel 旅馆
- BZOJ 1823: [JSOI2010]满汉全席(2-SAT)
- 3360: [Usaco2004 Jan]算二十四
- JavaScript 数据类型
- 3361: [Usaco2004 Jan]培根距离
- Java NIO
- 1342: [Baltic2007]Sound静音问题
- 加深理解HTTP请求---网络基础TCP/IP
- BZOJ2199: [Usaco2011 Jan]奶牛议会(2-SAT)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android基于ViewFilpper实现文字LED显示效果示例
- Android ViewPager导航小圆点实现无限循环效果
- ViewPager打造轮播图Banner/引导页Guide
- Android 实现带字母索引的侧边栏功能
- Android实现简单底部导航栏 Android仿微信滑动切换效果
- Android中Handler与Message的简单实例
- Android 实现通知消息水平播放、无限循环效果
- 详解xamarin Android 实现ListView万能适配器
- android 设置wallpaper的操作方法
- R语言作图不显示中文解决办法,如何使用中文字体
- Android OKHTTP的单例和再封装的实例
- Android 自定义返回按钮的实例详解
- Android在layout xml中使用ViewStub完成动态加载问题
- Android编程中Intent实现页面跳转功能详解
- Android编程之桌面小部件AppWidgetProvider用法示例