资源简介
java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
代码片段和文件信息
import java.util.Stack;
public class BiTree {
private BiTree leftTree;// 左子树
private BiTree rightTree;// 右子树
private object data;// 节点数据
public final static int MAX = 40;
BiTree[] elements = new BiTree[MAX];// 层次遍历时保存各个节点
int front;// 层次遍历时队首
int rear;// 层次遍历时队尾
// 构造函数
public BiTree() {
// TODO Auto-generated constructor stub
}
public BiTree(object data) {
this.data = data;
}
public BiTree(object data BiTree lefTree BiTree righTree) {
this.data = data;
this.leftTree = lefTree;
this.rightTree = righTree;
}
// 递归前序遍历二叉树
public void preOrder(BiTree tree) {
if (tree != null) {
visit(tree.data);
preOrder(tree.leftTree);
preOrder(tree.rightTree);
}
}
// 非递归实现前序遍历
public void iterativePreOrder(BiTree tree) {
Stack stack = new Stack();
if (tree != null) {
stack.push(tree);
while (!stack.isEmpty()) {
tree = stack.pop();
visit(tree.data);
if (tree.rightTree != null)
stack.push(tree.rightTree);
if (tree.leftTree != null)
stack.push(tree.leftTree);
}
}
}
// 递归中序遍历二叉树
public void inOrder(BiTree tree) {
if (tree != null) {
inOrder(tree.leftTree);
visit(tree.data);
inOrder(tree.rightTree);
}
}
// 非递归实现中序遍历
public void iterativeInOrder(BiTree tree) {
Stack stack = new Stack();
while (tree != null) {
while (tree != null) {
if (tree.rightTree != null)
stack.push(tree.rightTree);// 当前节点右子入栈
stack.push(tree);// 当前节点入栈
tree = tree.leftTree;
}
tree = stack.pop();
while (!stack.empty() && tree.rightTree == null) {
visit(tree.data);
tree = stack.pop();
}
visit(tree.data);
if (!stack.empty())
tree = stack.pop();
else
tree = null;
}
}
// 递归后序遍历二叉树
public void postOrder(BiTree tree) {
if (tree != null) {
postOrder(tree.leftTree);
postOrder(tree.rightTree);
visit(tree.data);
}
}
// 非递归实现后序遍历
public void iterativePostOrder(BiTree tree) {
BiTree tempTree = tree;
Stack stack = new Stack();
while (tree != null) {
// 左子树入栈
for (; tree.leftTree != null; tree = tree.leftTree)
stack.push(tree);
// 当前节点无右子或右子已经输出
while (tree != null
&& (tree.rightTree == null || tree.rightTree == tempTree)) {
visit(tree.data);
tempTree = tree;// 记录上一个已输出节点
if (stack.empty())
return;
tree = stack.pop();
}
// 处理右子
stack.push(tree);
tree = tree.rightTree;
}
}
// 层次遍历二叉树
public void layerOrder(BiTree tree) {
elements[0] = tree;
front = 0;
rear = 1;
while (front < rear) {
try {
if (elements[front].data != null) {
System.out.print(elements[front].data + “ “);
if (elements[front].leftTree != null)
elements[rear++] = elements[front].leftTree;
if (elements[front].rightTree != null)
elements[rear++] = elements[front].rightTree;
fr
- 上一篇:gason api及源码包
- 下一篇:基于java的超市管理系统
相关资源
- 基于java的超市管理系统
- 经典贪吃蛇java版
- Sphinx-JavaApi-查询修改
- Http器 FTP器java
- JSP七个小项目代码和笔记汇总(java
- JAVA获取客户端MAC,web获取客户端MAC,
- socket结合spring的
- java 使用jdbc封装连接数据库
- 大学学籍管理系统 javaweb 课程设计
- plugin-unstructured-storage-util-0.0.1-SNAPSHO
- Java Swing 数据库 上传显示图片
- java异常机制处理
- javaweb购物车_java 小项目
- 一个从JAVA直接生成UML图的软件
- java jxl添加水印(修改编译版)本版本
- JAVA聊天室项目
- java窗口输入并保存学生信息
- java 三视图与正轴测投影 计算机图形
- 带设计文档的 JAVA的 500行左右的 简单
- 传智播客毕向东Java基础全套视频教程
- 以文件储存数据的java自动阅卷系统
- jsp 关于留言和空间发表日志
- java学士后第一单元项目 北大青鸟音乐
- GUI版Java五子棋源码,可人机对战,经
- 多维k-means聚类算法java实现,导入直接
- java小游戏推箱子(含界面)
- java实现邮件发送三种发送方式都有
- Java拼图游戏源程序和论文开题报告等
- java Swing实现计算器源码
- java-web学习demo--最简单的servlet jsp跳转
评论
共有 条评论