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中
树代表一种非线性的数据结构,如果一组数组节点之间存在复杂的一对多关联时,程序就可以考虑使用树来保存这组数据了. 线性表.栈和队列都是线性的数据结构,这种数据结构之内的元素只存在一个对一个的关系.存储, ...
随机推荐
- Day3 AntV/G2图表的组成
简介 为了更好的使用G2进行数据可视化,我们需要先了解G2图表的组成及其相关概念. 完整的G2图表组成如下图所示:可以看出图表主要由axes(坐标轴axis的复数),tooltip(提示信息),gui ...
- 浅谈UART/12C/TTL的定义与区别与解析
UART/12C/TTL的定义与区别: UART:UART(Universal Asynchronous Receive Transmitter):也就是我们经常所说的串口,基本都用于调试.主机和从机 ...
- Flutter学习笔记(21)--TextField文本框组件和Card卡片组件
如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...
- Zabbix添加windows主机监控
zabbix监控windows主机 1.官网下载zabbix的windows-agent(选择相应版本): https://www.zabbix.com/cn/download_agents 2.将下 ...
- git 技术栈
之前用的都是svn ,git还是要了解的,万一哪天要用了呢
- NLP系列文章:子词嵌入(fastText)的理解!(附代码)
1. 什么是fastText 英语单词通常有其内部结构和形成⽅式.例如,我们可以从"dog""dogs"和"dogcatcher"的字⾯上推 ...
- python之爬虫-必应壁纸
python之爬虫-必应壁纸 import re import requests """ @author RansySun @create 2019-07-19-20:2 ...
- Linux下Tomcat的搭建以及开机自启动设置
首先进行下JDK的配置: 1.查看下系统信息,确认是32位还是64位:uname -a 2.下载相应位数的jdk压缩包,传到Linux系统,这里提供一个32位和64位的下载链接:https://pan ...
- C++ 重载运算符(详)
C++ 重载运算符 C 重载运算符 一重载函数 1例程 2备注 二重载运算符 11 二元运算符重载 11 一元运算符重载 111 -- 2备注 3 特殊运算符重载 31 号运算符 32 下标运算符 3 ...
- python 25 类的成员
目录 1. 类的私有成员 -- __ 1.1 类的私有静态属性 1.2 类的私有方法 1.3 对象的私有方法 2. 类的其他方法 2.1 类方法 @classmethod 2.2 静态方法 @stat ...