博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第3章 结构之法——重建二叉树
阅读量:6270 次
发布时间:2019-06-22

本文共 2479 字,大约阅读时间需要 8 分钟。

重建二叉树

问题描述

分析与解法

用java实现的代码如下:

1 package chapter3jiegouzhifa.RebuildBinTree; 2  3 /** 4  * 重建二叉树 5  * 递归解法 6  * @author DELL 7  * 8  */ 9 public class RebuildBinTree {10     //定义节点类11     public static class Node{12         int left;  //左子树位置13         int right;  //右子树位置14         char value;  //节点值15         public Node(int left, int right, char value){16             this.left = left;17             this.right = right;18             this.value = value;19         }20         public void setLeft(int left) {21             this.left = left;22         }23         public void setRight(int right) {24             this.right = right;25         }26     }27     /**28      * 重建二叉树29      * @param preOrder 前序遍历结果30      * @param inOrder    中序遍历结果31      * @param tree    重建的树32      * @param root  当前重建树的根节点位置33      */34     public static void rebuild(String preOrder, String inOrder, Node[] tree, int root){35         36         int nTreeLen = preOrder.length();37         //检查边界条件38         if(preOrder.length()==0||inOrder.length()==0)39             return ;40         //获取当前遍历的第一个节点41         Node temp = new Node(-1,-1,preOrder.charAt(0));42         //如果节点为空,把当前节点复制到根节点43         if(tree[root]==null){44             tree[root] = temp;45         }46         //如果当前树的长度为1,那么已经是最后一个节点47         if(nTreeLen == 1){    48             return ;49         }50         //寻找左子树的结尾51         int i=0;52         while(inOrder.charAt(i)!=temp.value&&i
0){59 tree[index].setLeft(++root);60 Node left = new Node(-1,-1,preOrder.charAt(1));61 tree[root]=left;62 // System.out.println(preOrder.substring(1,i+1)+" "+i);63 rebuild(preOrder.substring(1,i+1),inOrder.substring(0, i),tree,root);64 }65 //重建右子树66 if(nTreeLen-i-1>0){67 tree[index].setRight(root+i);68 Node right = new Node(-1,-1,preOrder.charAt(i+1));69 tree[root+i] = right;70 rebuild(preOrder.substring(i+1,nTreeLen),inOrder.substring(i+1, nTreeLen),tree,root+i);71 }72 }73 public static void main(String[] args) {74 String preOrder = "abdcef";75 String inOrder = "dbaecf";76 Node[] tree = new Node[preOrder.length()];77 rebuild(preOrder,inOrder,tree,0);78 System.out.println("重建的树为:");79 for(int i=0;i

程序运行结果如下:

重建的树为:a 左子树:b 右子树:cb 左子树:d 右子树:nulld 左子树:null 右子树:nullc 左子树:e 右子树:fe 左子树:null 右子树:nullf 左子树:null 右子树:null

 

转载地址:http://juppa.baihongyu.com/

你可能感兴趣的文章
Spring Boot日志管理
查看>>
动态注册HttpModule管道,实现global.asax功能
查看>>
使用 ES2015 编写 Gulp 构建
查看>>
[转]Using NLog for ASP.NET Core to write custom information to the database
查看>>
BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]
查看>>
MySQL 的instr函数
查看>>
Hibernate的核心对象关系映射
查看>>
接口与抽象类的使用选择
查看>>
if __name__ == '__main__'
查看>>
CF 375D. Tree and Queries【莫队 | dsu on tree】
查看>>
Maven最佳实践 划分模块 配置多模块项目 pom modules
查看>>
Hadoop学习笔记——WordCount
查看>>
Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 1)
查看>>
Java-Spring-获取Request,Response对象
查看>>
opencv项目报错_pFirstBlock==pHead解决办法
查看>>
MySQL日志
查看>>
Oracle性能优化之Oracle里的执行计划
查看>>
电脑如何连接远程服务器?听语音
查看>>
使用Xcode 查看objective-C的汇编代码
查看>>
Vue.js——60分钟快速入门
查看>>