6、二叉树树(java实现)
1、创建树的节点
public class Node {
public Object data; //存储数据
public Node leftChild; //左子树指针
public Node rightChild; //右字树指针
}
2、二叉树的实现
public class BinTree {
Node node;
public BinTree() {
}
public BinTree(Node node) {
node.leftChild = node.leftChild;
node.rightChild = node.rightChild;
}
/**
* 初始化二叉树头结点
*
* @param node :头结点
*/
public void initBinTree(Node node) {
node.leftChild = null;
node.rightChild = null;
}
/**
* 左插入节点
*
* @param curr_node
* @param element
* @return
*/
public Node insertLeftChild(Node curr_node, Object element) {
if (curr_node == null) {
return null;
}
Node newnode = new Node(); //初始化新节点
newnode.data = element;
newnode.leftChild = curr_node.leftChild; //插入新节点左子树为原子树node的左子树(---> null)
newnode.rightChild = null;
curr_node.leftChild = newnode; //转换curr_node节点为当前插入后的左子树
return curr_node.leftChild;
}
/**
* 右插入节点
*
* @param curr_node
* @param element
* @return
*/
public Node insertRightChild(Node curr_node, Object element) {
if (curr_node == null) {
return null;
}
Node saveNode = curr_node.rightChild;
Node newNode = new Node();
newNode.data = element;
newNode.rightChild = newNode;
newNode.rightChild = null;
curr_node.rightChild = newNode;
return curr_node.rightChild;
}
/**
* 删除左子树
*
* @param currNode
* @return
*/
public Node deleteLeftChild(Node currNode) {
if (currNode == null || currNode.leftChild == null) {
return null;
}
currNode.leftChild = null;
return currNode;
}
/**
* 删除右节点
*
* @param currNode
* @return
*/
public Node deleteRightChild(Node currNode) {
if (currNode == null || currNode.rightChild == null) {
return null;
}
currNode.rightChild = null;
return currNode;
}
/**
* 前序遍历
*
* @param root
*/
public void preOrder(Node root) {
if (root != null) {
System.out.print(root.data + " ");
preOrder(root.leftChild);
preOrder(root.rightChild);
}
}
/**
* 中序遍历
*
* @param root
*/
public void inOrder(Node root) {
if (root != null) {
inOrder(root.leftChild);
System.out.print(root.data + " ");
inOrder(root.rightChild);
}
}
/**
* 后序遍历
*
* @param root
*/
public void postOrder(Node root) {
if (root != null) {
postOrder(root.leftChild);
postOrder(root.rightChild);
System.out.print(root.data + " ");
}
}
/**
* 打印二叉树
*
* @param root
* @param n
*/
public void printf(Node root, int n) {
if (root == null) { //为空判断
return;
}
printf(root.rightChild, n + 1); //遍历打印右子树
for (int i = 0; i < n - 1; i++) {
System.out.print("\t");
}
if (n > 0) {
System.out.println("----" + root.data);
}
printf(root.leftChild, n + 1);
}
/**
* 二叉树查找元素
* @param root
* @param x
* @return
*/
public Node search(Node root, Object x) {
Node findNode = null; //找到就返回该节点指针,找不到就返回空
if (root != null) {
if (root.data == x) {
findNode = root;
} else {
findNode = search(root.leftChild, x);
if (findNode == null) {
findNode = search(root.rightChild, x);
}
}
}
return findNode;
}
public static void main(String[] args) {
Node root = new Node();
root.leftChild = null;
root.rightChild = null;
BinTree binTree = new BinTree();
Node p = null;
p = binTree.insertLeftChild(root, 'A');
p = binTree.insertLeftChild(p, 'B');
p = binTree.insertLeftChild(p, 'D');
p = binTree.insertRightChild(p, 'G');
p = binTree.insertRightChild(root.leftChild, 'C');
binTree.insertLeftChild(p, 'E');
binTree.insertRightChild(p, 'F');
binTree.printf(root, 0);
System.out.print("前序遍历 ");
binTree.preOrder(root.leftChild);
System.out.println();
System.out.print("中序遍历 ");
binTree.inOrder(root.leftChild);
System.out.println();
System.out.print("后序遍历 ");
binTree.postOrder(root.leftChild);
System.out.println();
Node findNode = binTree.search(root,'E');
if (findNode == null){
System.out.println("没有找到E");
}else{
System.out.println("元素E在二叉树中");
}
System.out.println("删除元素E");
binTree.deleteLeftChild(p);
Node findE = binTree.search(root,'E');
if (findE == null){
System.out.println("没有找到E");
}else{
System.out.println("元素E在二叉树中");
}
}
}
3、实现结果
----F
----C
----E
----A
----B
----G
----D
前序遍历 A B D G C E F
中序遍历 D G B A E C F
后序遍历 G D B E F C A
元素E在二叉树中
删除元素E
没有找到E
6、二叉树树(java实现)的更多相关文章
- 【数据结构】之二叉树的java实现
转自:http://blog.csdn.net/wuwenxiang91322/article/details/12231657 二叉树的定义: 二叉树是树形结构的一个重要类型.许多实际问题抽象出来的 ...
- 二分法与二叉树的 Java 实现
算法与数据结构始终是计算机基础的重要一环,今天我们来讨论下 Java 中二叉树的实现以及一些简单的小算法,如二分查找,归并排序等. 二分查找 二分查找是一种在有序数组中查找某一特定元素的搜索算法,它在 ...
- 二叉树的Java实现及特点总结
二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 我们先介绍一些关于二叉树的概念名词. 二叉树: ...
- AVL树----java
AVL树----java AVL ...
- 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历
根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...
- 伸展树--java
文字转载自:http://www.cnblogs.com/vamei 代码转载自:http://www.blogjava.net/javacap/archive/2007/12/19/168627.h ...
- 非递归遍历N-ary树Java实现
2019-03-25 14:10:51 非递归遍历二叉树的Java版本实现之前已经进行了总结,这次做的是非递归遍历多叉树的Java版本实现. 在非递归遍历二叉树的问题中我个人比较推荐的是使用双whil ...
- B树Java代码实现以及测试
B树定义 B 树又叫平衡多路查找树.一棵m阶的B 树 (m叉树)的特性如下: 根节点至少有两个孩子 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子. 每个非根节点至少有M/2-1(上取整)个 ...
- 树和二叉树在java中
树代表一种非线性的数据结构,如果一组数组节点之间存在复杂的一对多关联时,程序就可以考虑使用树来保存这组数据了. 线性表.栈和队列都是线性的数据结构,这种数据结构之内的元素只存在一个对一个的关系.存储, ...
随机推荐
- 同“窗”的较量:部署在 Windows 上的 .NET Core 版博客站点发布上线
为了验证 docker swarm 在高并发下的性能问题,周一我们发布了使用 docker-compose 部署的 .net core 版博客站点(博文链接),但由于有1行代码请求后端 web api ...
- java集合类的相关转换
下面的的案例,基本上是以代码为主,文字的描述较少,后期有时间会继续添加. ArrayToList public void ArrayToList() { System.out.println(&quo ...
- SQLServer数据库处于恢复挂起状态的解决办法
一.总结 如果数据库处于一个恢复挂起的状态,并且对数据库做脱机和分离的操作,报出数据库文件不可访问的错误,可能是因为数据库的数据文件和日志文件在数据库正常连接的情况下,文件所在的磁盘脱机了,导致数据库 ...
- PHP 数组转字符串后仍保留数组格式
写此方法的目的是,我想把一个PHP数组配置文件读进程序,添加些配置,然后在写入文件: var_export 方法会把原来的配置打乱(比如数组序号我没有加,他自动给我加上 0,1,2,3...),而且格 ...
- ATX agent+UIautomation2 自动化测试介绍
纯搬运贴,内容几乎来源于作者的几篇介绍文章,这里做了整合 目前ATX+UIautomator2 处于自动化界的浪口风尖,现在有幸终于有时间对ATX进行了粗浅的了解 为什么要用ATX ATX+UIaut ...
- Mybatis-Spring扫描路径有重叠导致Invalid bound statement(not found)问题
背景 近日,某个系统的测试环境mybatis总是报Invalid bound statement(not found)异常,导致tomcat容器无法启动.异常信息如下: org.apache.ibat ...
- 打印机服务配置篇WindowsServer2008
本次配置Server2008 打印服务器 目的实现Kingdee远程打印服务,直接在金蝶客户端部署打印机服务器 服务器角色: --打印服务器 --LPD服务 --Internet打印 *打印服务 ...
- Java内部类的基本解析
内部类 内部类的基本概念 所谓的内部类也就是在一个类的内部进行其他类结构的嵌套操作. 为什么要使用内部类? 这就要引用一句十分著名的一本书叫<Think in java>中的一句名言了—— ...
- vim文件时,误用了ctrl+z命令,该怎么办?
linux中,当正在使用vim命令编辑文件,退出时,如果误使用了 ctrl+z ,当前目录中会多一个隐藏文件. 比如我正在编辑 t.txt 文件时,误以为我之前使用的是 tail 命令,直接使用 ct ...
- 如何运用PHP+REDIS解决负载均衡后的session共享问题
一.为什么要使用Session共享? 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的 ...