资源简介
编程实现如下功能:
1、假设二叉树的结点值是字符,根据输入的一颗二叉树的标明了空子树的完整先根遍历序列,建立一棵以二叉链表表示的二叉树。
2、对二叉树进行先根、中根和后根遍历操作,并输出遍历序列,同时观察输出序列是否与逻辑上的序列一致。
3、统计二叉树的结点个数和叶子结点个数,并分别输出其值。
代码片段和文件信息
package ch05;
/**
*
*二叉链式存储结构下的二叉树
*
*/
import ch03.linkQueue;
import ch03.linkStack;
public class BiTree {
private BiTreeNode root;// 树的根结点
public BiTree() {// 构造一棵空树
this.root = null;
}
public BiTree(BiTreeNode root) {// 构造一棵树
this.root = root;
}
// 由先根遍历的数组和中根遍历的数组建立一棵二叉树
// 其中参数preOrder是整棵树的 先根遍历,inOrder是整棵树的中根遍历,preIndex是
// 先根遍历从preOrder字符串中的开始位置,inIndex是中根遍历从字符串inOrder中的开始位置,count表示树结点的个数
public BiTree(String preOrder String inOrder int preIndex int inIndex
int count) {
if (count > 0) {// 先根和中根非空
char r = preOrder.charAt(preIndex);// 取先根字符串中的第一个元素作为根结点
int i = 0;
for (; i < count; i++)
// 寻找根结点在中根遍历字符串中的索引
if (r == inOrder.charAt(i + inIndex))
break;
root = new BiTreeNode(r);// 建立树的根结点
root.lchild=new BiTree(preOrder inOrder preIndex + 1 inIndex
i).root;// 建立树的左子树
root.rchild=new BiTree(preOrder inOrder preIndex + i + 1
inIndex + i + 1 count - i - 1).root;// 建立树的右子树
}
}
// 由标明空子树的先根遍历序列建立一棵二叉树
private static int index = 0;// 用于记录preStr的索引值
public BiTree(String preStr) {
char c = preStr.charAt(index++);// 取出字符串索引为index的字符,且index增1
if (c != ‘#‘) {// 字符不为#
root = new BiTreeNode(c);// 建立树的根结点
root.lchild=new BiTree(preStr).root;// 建立树的左子树
root.rchild=new BiTree(preStr).root;// 建立树的右子树
} else
root = null;
}
// 先根遍历二叉树基本操作的递归算法
public void preRootTraverse(BiTreeNode T) {
if (T != null) {
System.out.print(T.data); // 访问根结点
preRootTraverse(T.lchild);// 访问左子树
preRootTraverse(T.rchild);// 访问右子树
}
}
// 先根遍历二叉树基本操作的非递归算法
public void preRootTraverse() {
BiTreeNode T = root;
if (T != null) {
linkStack S = new linkStack();// 构造栈
S.push(T);// 根结点入栈
while (!S.isEmpty()) {
T = (BiTreeNode) S.pop();// 移除栈顶结点,并返回其值
System.out.print(T.data); // 访问结点
while (T != null) {
if (T.lchild != null) // 访问左孩子
System.out.print(T.lchild.data); // 访问结点
if (T.rchild != null)// 右孩子非空入栈
S.push(T.rchild);
T = T.lchild;
}
}
}
}
// 中根遍历二叉树基本操作的递归算法
public void inRootTraverse(BiTreeNode T) {
if (T != null) {
inRootTraverse(T.lchild);// 访问左子树
System.out.print(T.data); // 访问根结点
inRootTraverse(T.rchild);// 访问右子树
}
}
// 中根遍历二叉树基本操作的非递归算法
public void inRootTraverse() {
BiTreeNode T = root;
if (T != null) {
linkStack S = new Lin
- 上一篇:ANDROID移动开发基础案例教程
- 下一篇:数据结构-串的模式匹配算法Java实现
相关资源
- 数据结构-串的模式匹配算法Java实现
- java工信部考试题库
- java五子棋游戏(源码)
- trident-7.0.jar
- 一个java新闻标题爬虫
- 课设职工工资管理系统
- Java开发的记事本完整版源代码
- java课程设计(人事管理系统)283197
- Java多线程赛马游戏Java源码
- java连接MySQL的个人通讯录
- 《Java语言程序设计》-期末考试试题及
- Java课程设计大作业FlappyBird
- 使用javase的图形化界面编写的聊天室
- 百度翻译API调用案例
- 架构探险-从零开始写Java Web框架-全书
- 医院分诊管理系统
- 中兴软创java面试题
- 2018校招-中兴软创java面试题
- 企业通讯录项目 基于SSM下的JAVA项目
- Android通过JavaWeb实现用户登录(一)
- 双线程JAVA小程序
- java 正则匹配所有 {},并取出所有符合
- JavaWeb项目实战和从入门到精通第三版
- 传智javaEE35期就业班全套视频.txt
- 数据库大作业Java---采购系统满分
- java实现的仿UNIX操作系统课设
-
xm
l的登录与注册 - java对打游戏
- 商店管理系统
- 2018Java商城项目品优购含视频,代码,
评论
共有 条评论