package com.test.tree;public class BinarySearchTree<T extends Comparable<? super T>> {/*定义二叉树的节点*/private class BinaryNode<T>{public T data;public BinaryNode<T> lt;public BinaryNode<T> rt;public BinaryNode(T data) {this(data, null, null);}public BinaryNode(T data, BinaryNode<T> lt, BinaryNode<T> rt) {this.data = data;this.lt = lt;this.rt = rt;}}private BinaryNode<T> root; //定义二叉查找树的根节点public BinarySearchTree(){ //初始化二叉查找树root = null;}public void makeEmpty(){ //树清空root = null;}public boolean isEmpty(){ //树判空return root == null;}public boolean contains(T x){ //判断是否包含某个值return contains(root, x);}public boolean contains(BinaryNode<T> root, T x){if(root == null){return false;}int compare = x.compareTo(root.data);if(compare == 0){return true;}else if(compare < 0){contains(root.lt, x);}else {contains(root.rt, x);}return false;}public T findMin(){ //获得树中最小值if(!isEmpty()){return findMin(root).data;}return null;}public T findMax(){ //获得树中最大值if(!isEmpty()){return findMax(root).data;}return null;}public void insert(T data){ //插入数据root = insert(data, root);}public void remove(T data){root = remove(data, root);}public void printTree(){if(root == null){System.out.println("empty tree");}else{printTree(root);}}/*中序遍历*/public void printTree(BinaryNode<T> t){if(t != null){printTree(t.lt);System.out.print(t.data+"、");printTree(t.rt);}}/*** 删除查找树的某个节点,首先用要删除节点的右子树中最小值替换节点值,* 再从右子树中删除此节点,递归调用* */public BinaryNode<T> remove(T data, BinaryNode<T> t){if(t == null){return t;}int compare = data.compareTo(t.data);if(compare < 0){//插入值比根节点的值小,插入到左字数t.lt = remove(data, t.lt);}else if(compare > 0){//插入值比根节点的值小,插入到左字数t.rt = remove(data, t.rt);}else if(t.lt != null && t.rt != null){t.data = findMin(t.rt).data; //将右子树中的最小值赋给要删除的节点t.rt = remove(t.data, t.rt);}else{t = t.lt == null? t.rt:t.lt;}return t;}public BinaryNode<T> insert(T data, BinaryNode<T> t){if(t == null){return new BinaryNode<T>(data, null, null);}int compare = data.compareTo(t.data);if(compare < 0){//插入值比根节点的值小,插入到左字数t.lt = insert(data, t.lt);}else if(compare > 0){//插入值比根节点的值小,插入到左字数t.rt = insert(data, t.rt);}else{}return t;}public BinaryNode<T> findMin(BinaryNode<T> t){if(t == null){return t;}else if(t.lt == null){ //查找树的左边比节点值小,找到最左边的节点即可return t;}else{return findMin(t.lt);}}public BinaryNode<T> findMax(BinaryNode<T> t){if(t == null){return null;}else if(t.rt == null){ //查找树的右边比节点值大,找到最右边的节点即可return t;}return findMax(t.rt);}public static void main(String[] args) {BinarySearchTree<Integer> binarySearchTree = new BinarySearchTree<Integer>();binarySearchTree.insert(8);binarySearchTree.insert(4);binarySearchTree.insert(6);binarySearchTree.insert(3);binarySearchTree.insert(14);binarySearchTree.insert(10);System.out.println("最小值: "+binarySearchTree.findMin());System.out.println("最大值: "+binarySearchTree.findMax());binarySearchTree.printTree();binarySearchTree.remove(8);System.out.println();binarySearchTree.printTree();}
}

转载于:https://www.cnblogs.com/studyDetail/p/7152008.html

二叉查找树--java相关推荐

  1. 二叉查找树Java实现代码

    二叉查找树(Binary Search Tree),或者是一颗空树,或者是具有下列性质的二叉树: 1.若它的左子树不空,则其左子树上的所有结点的值均小于它根结点的值: 2.若它的右子树不空,则其右子树 ...

  2. AVL树-自平衡二叉查找树(Java实现)

    在计算机科学中,AVL树是最先发明的自平衡二叉查找树.AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An alg ...

  3. 二叉查找树 Java实现

    定义: 一棵二叉查找树是一棵二叉树,每个节点都含有一个Comparable的键(以及对应的值). 每个节点的键都大于左子树中任意节点的键而小于右子树中任意节点的键. 树的术语: Name Functi ...

  4. 二叉查找树 java代码实现

    文章目录 代码实现 节点实现类 二叉树实现 单元测试 代码实现 节点实现类 package csdn.dreamzuora.tree;/*** Title:* Description:** @vers ...

  5. 数据结构笔记--二叉查找树概述以及java代码实现

    一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...

  6. 数据结构与算法-二叉查找树(java描述)

    一.概述 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 1.1.定义 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: ...

  7. 二叉查找树的Java实现

    转自:http://blog.csdn.net/lovesqcc/article/details/6246615 为了克服对树结构编程的恐惧感,决心自己实现一遍二叉查找树,以便掌握关于树结构编程的一些 ...

  8. xdocument查找节点值_二叉查找树(java)

    一棵二叉查找树(BST)是一颗二叉树,其中每个节点都含有一个Comparable的键且每个节点的键(以及相关的值)都大于其左子树中的任意节点的键而小于右子树的任意结点的键. 数据表示 和链表一样,我们 ...

  9. 分治法在二叉树遍历中的应用(JAVA)--二叉查找树高度、前序遍历、中序遍历、后序遍

    分治法在二叉树遍历中的应用 二叉树本身就是由两个更小的部分组成--左子树和右子树,所以二叉树的问题非常适合用分治法来解决. 二叉树的高度:从叶子到根之间的最长路径.我们可以理解为根的左子树高度和右子树 ...

最新文章

  1. 2、Flutter Widget(IOS Style) - CupertinoActionSheet;
  2. ref和out区别总结
  3. SQL必知必会-组合查询
  4. 开启弹窗_烦人的电脑弹窗怎样关闭?4种方法还你干净桌面
  5. JSON(1)--- 语法
  6. 尽说大实话!周鸿祎:有的软件会偷偷打开你的摄像头或麦克风
  7. Windows给SVN配置中文语言包
  8. SSM框架---开发免费小说网站(h5+电脑端)
  9. Java 拾遗补阙 ----- 浅拷贝和深拷贝(对象克隆)
  10. 趣味ACM题——圣骑士的斩杀
  11. 解决Failed to introspect Class KafkaMetricsAutoConfiguration
  12. 貂蝉待你玩转Java王者荣耀
  13. 数字控制增益的放大器的设计
  14. vscode设置启动时不打开上一次目录
  15. 集成微信登入遇到问题
  16. 国产电影最俗套的九十九个镜头(完整版)
  17. 内部存储器分区 android,Android的存储器类型(RAM V内部存储器)
  18. 计算机毕业设计之java+ssm基于HTML5的网上跳蚤市场+二手交易网站
  19. 外网远程控制局域网内主机,路由器端口转发设置
  20. 分频器设计(三)小数分频

热门文章

  1. 【原创】MySQL5.7 虚拟列实现表达式索引
  2. MSSQL 判断表是否存在的两种方法
  3. systematic approach for educational resource gathering
  4. 计算机类期刊的影响因子
  5. 从Powershell 入侵脚本学到的如何执行后台runspace~
  6. 作业1-四则运算题目生成程序
  7. 11.使用ForwardAction实现页面屏蔽。
  8. IIS 7.5关闭.net程序DEBUG
  9. Kotlin教程学习-数据类型
  10. json2.js参考