剑指Offer--我用JAVA做(三)
来源:互联网 发布:做广告牌的软件 编辑:程序博客网 时间:2024/06/01 10:51
/** * 题目描述: * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 * 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 * 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 * @author zonebase@163.com */public class day04 {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}; BinaryTreeNode root=reConstructTree(preOrder,inOrder); System.out.println("先序输出:"); printPre(root); System.out.println(); System.out.println("中序输出:"); printIn(root); System.out.println(); System.out.println("后序输出:"); printBe(root); }private static BinaryTreeNode reConstructTree(int preOrder[], int inOrder[]){//前序的第一个节点就是根节点BinaryTreeNode root=new BinaryTreeNode(preOrder[0]);//中序 被根节点分隔,左侧为左节点右侧为右节点int leftNum=0;for(int i=0;i<inOrder.length;i++){if(root.getValue()==inOrder[i]){leftNum=i;break;}}int rightNum=preOrder.length-leftNum-1;if(leftNum>0){//把左侧节点看成新的二叉树前序和中序int newPreOrder[] =new int[leftNum];int newInOrder[] =new int[leftNum];for(int i=0;i<leftNum;i++){newPreOrder[i]=preOrder[i+1];newInOrder[i]=inOrder[i];}//进行递归构造root.setLeft(reConstructTree(newPreOrder,newInOrder));}if(rightNum>0){//把右侧节点看成新的二叉树前序和中序int newPreOrder[] =new int[rightNum];int newInOrder[] =new int[rightNum];for(int i=0;i<rightNum;i++){newPreOrder[i]=preOrder[inOrder.length-rightNum+i];newInOrder[i]=inOrder[inOrder.length-rightNum+i];}//进行递归构造root.setRight(reConstructTree(newPreOrder,newInOrder));}return root;}/** * 先序输出 * @param tree */private static void printPre(BinaryTreeNode tree){if(tree!=null){System.out.print(tree.getValue()+" ");printPre(tree.getLeft());printPre(tree.getRight());}}/** * 中序输出 * @param tree */private static void printIn(BinaryTreeNode tree){if(tree!=null){printIn(tree.getLeft());System.out.print(tree.getValue()+" ");printIn(tree.getRight());}}/** * 后序输出 * @param tree */private static void printBe(BinaryTreeNode tree){if(tree!=null){printBe(tree.getLeft());printBe(tree.getRight());System.out.print(tree.getValue()+" ");}}}/** * 二叉树节点类定义 * * @author zonebase@163.com * @date 2017年6月8日 下午4:46:12 */class BinaryTreeNode { private int value; private BinaryTreeNode left; private BinaryTreeNode right; public BinaryTreeNode(int value) { this.value = value; } public BinaryTreeNode(int value, BinaryTreeNode left, BinaryTreeNode right) { this.value = value; this.left = left; this.right = right; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public BinaryTreeNode getLeft() { return left; } public void setLeft(BinaryTreeNode left) { this.left = left; } public BinaryTreeNode getRight() { return right; } public void setRight(BinaryTreeNode right) { this.right = right; } }
阅读全文
0 0
- 剑指Offer--我用JAVA做(三)
- 剑指Offer--我用JAVA做(一)
- 剑指Offer--我用JAVA做(二)
- 《剑指Offer》做题总结(三)
- 剑指offer(三)java
- 剑指Offer笔记<JAVA版>(三)
- 剑指offer习题JAVA实现(三)
- 剑指offer 练习三(Java版)
- 【剑指offer-Java版】47不用加减乘除做加法
- 剑指offer:不用加减乘除做加法(java)
- [剑指Offer 47] 不用加减乘除做加法(Java)
- 剑指offer 三
- 剑指offer(三)
- 剑指offer(题三)
- 剑指offer题三
- 牛客网做题总结:剑指offer中题目,java版三
- 剑指Offer题目JAVA版思路与代码(三)
- Java-剑指offer-正方体的三面和相等
- Android USB Camera
- XStream 序列化与反序列化
- AndroidStudio2.0以上进行单元测试详解
- RxJava 和 Retrofit的调用示例
- strlen和mystrlen
- 剑指Offer--我用JAVA做(三)
- 说说 freemarker 的命名空间
- 深入探究connect函数
- Gradle实现不同的applicationId
- Android 自定义View——带进度条按钮
- java面试只是点
- 初学数据库greendao 3.2
- 使用FormData对象提交表单及上传图片
- Java书单(不定期更新)