前序和中序遍历重建二叉树
来源:互联网 发布:手机验钞软件 编辑:程序博客网 时间:2024/05/22 12:13
代码如下:
原文链接:http://bylijinnan.iteye.com/blog/1355279
最重要的是要找到左子树和右子树的前序,中序遍历在数组中的起始位置,终止位置。
public class BuildTreePreOrderInOrder {/** * Build Binary Tree from PreOrder and InOrder * _______7______ / \ __10__ ___2 / \ / 4 3 _8 \ / 1 11 */public static void main(String[] args) {BuildTreePreOrderInOrder build=new BuildTreePreOrderInOrder();int[] preOrder = {7,10,4,3,1,2,8,11};int[] inOrder = {4,10,3,1,7,11,8,2};Node root=build.buildTreePreOrderInOrder(preOrder,0,preOrder.length-1,inOrder,0,inOrder.length-1);build.preOrder(root);System.out.println();build.inOrder(root);System.out.println();build.postOrder(root);}public Node buildTreePreOrderInOrder(int[] preOrder,int begin1,int end1,int[] inOrder,int begin2,int end2){if(begin1>end1||begin2>end2){return null;}int rootData=preOrder[begin1];Node head=new Node(rootData);head.left =null;head.right=null;int divider=findIndexInArray(inOrder,rootData,begin2,end2);if(divider==-1){System.out.println("input invalid");}int offSet=divider-begin2-1;head.left =buildTreePreOrderInOrder(preOrder,begin1+1,begin1+1+offSet,inOrder,begin2,begin2+offSet);head.right=buildTreePreOrderInOrder(preOrder,begin1+offSet+2,end1,inOrder,divider+1,end2);return head;}public int findIndexInArray(int[] a,int x,int begin,int end){for(int i=begin;i<=end;i++){if(a[i]==x)return i;}return -1;}public void preOrder(Node n){if(n!=null){System.out.print(n.val+",");preOrder(n.left);preOrder(n.right);}}public void inOrder(Node n){if(n!=null){inOrder(n.left);System.out.print(n.val+",");inOrder(n.right);}}public void postOrder(Node n){if(n!=null){postOrder(n.left);postOrder(n.right);System.out.print(n.val+",");}}class Node{Node left;Node right;int val;public Node(int val){this.val=val;}public Node getLeft(){return left;}public Node getRight(){return right;}public int getVal(){return val;}}}
结果如下:
7,10,4,3,1,2,8,11,
4,10,3,1,7,11,8,2,
4,1,3,10,11,8,2,7,
0 0
- 前序遍历和中序遍历重建二叉树
- 前序遍历和中序遍历重建二叉树
- 前序和中序遍历重建二叉树
- 根据中序和前序遍历重建二叉树
- 根据前序和中序遍历重建二叉树
- 剑指offer 重建二叉树-前序遍历和中序遍历重建
- 重建二叉树---根据前序和中序遍历结果重建二叉树
- 已知二叉树的前序遍历和中序遍历重建二叉树(二叉树)
- 根据二叉树的前序遍历和中序遍历重建二叉树
- 输入二叉树的前序遍历和中序遍历,重建出该二叉树
- 根据二叉树的前序遍历和中序遍历的结果,重建二叉树
- 【二叉树】由前序遍历和中序遍历重建二叉树
- 二叉树--由前序遍历和中序遍历重建二叉树
- 根据前序遍历、中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- 根据前序遍历和中序遍历重建二叉树的Java实现
- 已知前序遍历和中序遍历,重建二叉树
- (剑指offer笔记)根据前序遍历和中序遍历重建二叉树
- Yarn 2.8.x 基于标签的调度
- 高性能流媒体服务器-nebula之数据结构(7)--环形无锁队列
- 排序方法总结
- 大数据美食——寻找地图上的美味
- Struts2框架(三)
- 前序和中序遍历重建二叉树
- 第一篇博客文章,发表试试。最近新看到的两道比较有意思的数据结构题
- LED跑马灯-寄存器
- 朴素贝叶斯分类(Naive Bayesian classification)
- myeclipse2014 破解
- Apache安装成功,测试时无法跳出It works!页面
- Spring 核心解析
- Hadoop 2.x hdfs(热/冷)升级步骤
- 【错误笔记】错误1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated...