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实现)的更多相关文章

  1. 【数据结构】之二叉树的java实现

    转自:http://blog.csdn.net/wuwenxiang91322/article/details/12231657 二叉树的定义: 二叉树是树形结构的一个重要类型.许多实际问题抽象出来的 ...

  2. 二分法与二叉树的 Java 实现

    算法与数据结构始终是计算机基础的重要一环,今天我们来讨论下 Java 中二叉树的实现以及一些简单的小算法,如二分查找,归并排序等. 二分查找 二分查找是一种在有序数组中查找某一特定元素的搜索算法,它在 ...

  3. 二叉树的Java实现及特点总结

    二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加.但是他也有自己的缺点:删除操作复杂. 我们先介绍一些关于二叉树的概念名词. 二叉树: ...

  4. AVL树----java

                                                                                        AVL树----java AVL ...

  5. 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历

    根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...

  6. 伸展树--java

    文字转载自:http://www.cnblogs.com/vamei 代码转载自:http://www.blogjava.net/javacap/archive/2007/12/19/168627.h ...

  7. 非递归遍历N-ary树Java实现

    2019-03-25 14:10:51 非递归遍历二叉树的Java版本实现之前已经进行了总结,这次做的是非递归遍历多叉树的Java版本实现. 在非递归遍历二叉树的问题中我个人比较推荐的是使用双whil ...

  8. B树Java代码实现以及测试

    B树定义 B 树又叫平衡多路查找树.一棵m阶的B 树 (m叉树)的特性如下: 根节点至少有两个孩子 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子. 每个非根节点至少有M/2-1(上取整)个 ...

  9. 树和二叉树在java中

    树代表一种非线性的数据结构,如果一组数组节点之间存在复杂的一对多关联时,程序就可以考虑使用树来保存这组数据了. 线性表.栈和队列都是线性的数据结构,这种数据结构之内的元素只存在一个对一个的关系.存储, ...

随机推荐

  1. Day3 AntV/G2图表的组成

    简介 为了更好的使用G2进行数据可视化,我们需要先了解G2图表的组成及其相关概念. 完整的G2图表组成如下图所示:可以看出图表主要由axes(坐标轴axis的复数),tooltip(提示信息),gui ...

  2. 浅谈UART/12C/TTL的定义与区别与解析

    UART/12C/TTL的定义与区别: UART:UART(Universal Asynchronous Receive Transmitter):也就是我们经常所说的串口,基本都用于调试.主机和从机 ...

  3. Flutter学习笔记(21)--TextField文本框组件和Card卡片组件

    如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...

  4. Zabbix添加windows主机监控

    zabbix监控windows主机 1.官网下载zabbix的windows-agent(选择相应版本): https://www.zabbix.com/cn/download_agents 2.将下 ...

  5. git 技术栈

    之前用的都是svn ,git还是要了解的,万一哪天要用了呢

  6. NLP系列文章:子词嵌入(fastText)的理解!(附代码)

    1. 什么是fastText 英语单词通常有其内部结构和形成⽅式.例如,我们可以从"dog""dogs"和"dogcatcher"的字⾯上推 ...

  7. python之爬虫-必应壁纸

    python之爬虫-必应壁纸 import re import requests """ @author RansySun @create 2019-07-19-20:2 ...

  8. Linux下Tomcat的搭建以及开机自启动设置

    首先进行下JDK的配置: 1.查看下系统信息,确认是32位还是64位:uname -a 2.下载相应位数的jdk压缩包,传到Linux系统,这里提供一个32位和64位的下载链接:https://pan ...

  9. C++ 重载运算符(详)

    C++ 重载运算符 C 重载运算符 一重载函数 1例程 2备注 二重载运算符 11 二元运算符重载 11 一元运算符重载 111 -- 2备注 3 特殊运算符重载 31 号运算符 32 下标运算符 3 ...

  10. python 25 类的成员

    目录 1. 类的私有成员 -- __ 1.1 类的私有静态属性 1.2 类的私有方法 1.3 对象的私有方法 2. 类的其他方法 2.1 类方法 @classmethod 2.2 静态方法 @stat ...