2019独角兽企业重金招聘Python工程师标准>>>

问题描述:

BinarySearchTree

问题分析:

基本的实现

代码实现:

package c04;
/*** @project: DataStructureAndAlgorithmAnalysis* @filename: BinarySearchTree.java* @version: 0.10* @author: JM Han* @date: 18:38 2015/10/19* @comment: Test Purpose* @result:*/import c02.BinarySearch;
import master.UnderflowException;
import java.util.Comparator;
import static tool.util.*;public class BinarySearchTree<AnyType extends Comparable<? super AnyType>> {private static class BinaryNode<AnyType>{BinaryNode(AnyType theElement){this(theElement, null, null);}BinaryNode(AnyType theElement, BinaryNode<AnyType> lt, BinaryNode<AnyType> rt){element = theElement; left = lt; right = rt;}AnyType element;BinaryNode<AnyType> left;BinaryNode<AnyType> right;}private BinaryNode<AnyType> root;public BinarySearchTree(){root = null;}public void makeEmpty(){root = null;}public boolean isEmpty(){return null == root;}public boolean contains(AnyType x){return contains(x, root);}public AnyType findMin(){if(isEmpty())throw new UnderflowException();return findMin(root).element;}public AnyType findMax(){if(isEmpty())throw new UnderflowException();return findMax(root).element;}public void insert(AnyType x){root = insert(x, root);}public void remove(AnyType x){root = remove(x, root);}public void printTree(){if(isEmpty())System.out.println("Empty Tree");elseprintTree(root);}private boolean contains(AnyType x, BinaryNode<AnyType> t){if(t == null)return false;int comparableResult = x.compareTo(t.element);if(comparableResult < 0)return contains(x, t.left);else if(comparableResult > 0)return contains(x, t.right) ;elsereturn true;}private BinaryNode<AnyType> findMin(BinaryNode<AnyType> t){if(null == t)return null;else if(t.left == null)return t;return findMin(t.left);}private BinaryNode<AnyType> findMax(BinaryNode<AnyType> t){if(t != null)while(t.right != null)t = t.right;return t;}private BinaryNode<AnyType> insert(AnyType x, BinaryNode<AnyType> t){if(null == t)return new BinaryNode<AnyType>(x, null, null);int compareResult = x.compareTo(t.element);if(compareResult < 0)t.left = insert(x, t.left);else if(compareResult > 0)t.right = insert(x, t.right);else;return t;}private BinaryNode<AnyType> remove(AnyType x, BinaryNode<AnyType> t){if(null == t)return t;int compareResult = x.compareTo(t.element);if(compareResult < 0)t.left = remove(x, t.left);else if(compareResult > 0)t.right = remove(x, t.right);else if(t.left != null && t.right != null){t.element = findMin(t.right).element;t.right = remove(t.element, t.right);}elset = (t.left != null)?t.left:t.right;return t;}private void printTree(BinaryNode<AnyType> t){if(null != t){printTree(t.left);System.out.println(t.element);printTree(t.right);}}public static void main(String[] args) {BinarySearchTree<Integer> bst = new BinarySearchTree<Integer>();bst.insert(4);bst.insert(3);bst.insert(6);bst.insert(0);bst.insert(2);bst.insert(3);System.out.println("Contains 3: " + bst.contains(3));System.out.println("Max: " + bst.findMax());System.out.println("Min: " + bst.findMin());bst.remove(3);bst.printTree();}
}

代码输出:

Contains 3: true
Max: 6
Min: 0
0
2
4
6

转载于:https://my.oschina.net/jimmyhan/blog/519351

基本数据结构之BinarySearchTree相关推荐

  1. 力扣 (LeetCode)-对称二叉树,树|刷题打卡

    Github来源:力扣 (LeetCode)|刷题打卡 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者 [已开启]任务一:刷题打卡 * 10 篇 哪吒人生信条:如果你所学的东西 处于喜欢 ...

  2. 程序员们都必须知道的8种通用数据结构

    数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作. 数据结构在计算机科学和软件工程领域具有广泛而多样的用途. 几乎所有已开发的程序或软件系统都使用数据结构. 此外, ...

  3. 数据结构显示树的所有结点_您需要了解的有关树数据结构的所有信息

    数据结构显示树的所有结点 When you first learn to code, it's common to learn arrays as the "main data struct ...

  4. 数据结构之二叉搜索树(BST)

    数据结构之二叉搜索树(BST) 1. 二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: ( ...

  5. 每个程序员都必须知道的 8 种数据结构

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 快速介绍8种数据结构 数据结构是一种特殊的组织和存储数据的方式,可 ...

  6. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  7. 数据结构与算法 整理笔记---二叉搜索树

    二叉搜索树 查找问题是计算机中非常重要的基础问题 二分查找法 对于有序数组,才能使用二分查找法(排序作用) public class BinarySearch {public static int b ...

  8. 每个程序员都必须知道的8种数据结构

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://suo.im/6oo92L 快速 ...

  9. 【关于封装的那些事】 缺失封装 【关于封装的那些事】 泄露的封装 【关于封装的那些事】 不充分的封装 【图解数据结构】二叉查找树 【图解数据结构】 二叉树遍历...

    [关于封装的那些事] 缺失封装 目录 - 缺失封装 为什么不能缺失封装? 缺失封装潜在的原因 未意识到关注点会不断变化 混合关注点 幼稚的设计决策 示例分析一 示例分析二 总结 缺失封装 没有将实现变 ...

最新文章

  1. 负载分析及问题排查极简教程
  2. 代码实战 | 用LeGO-LOAM实现地面提取
  3. shell学习(17)- shell中21的解释及输入输出重定向
  4. (第一课)Python学习之蟒蛇绘制
  5. Java微服务(二)【idea中文插件安装】(手把手编写,超级详细)
  6. 天池 在线编程 删除字符(单调栈)
  7. 怎么设置班级文件服务器,如何开设论坛如题下学期老师组织学生开一个班级论坛有专用服务器接下 爱问知识人...
  8. Python机器学习:梯度下降法004实现线性回归中的梯度下降法
  9. 【学习】js学习笔记---数组对象
  10. js map遍历 修改对象里面的值_前端面试之你必须要懂的原生JS
  11. 使用FCEUX调试器寻找并修改游戏初始物品
  12. java英文字母_用JAVA编一个程序输出全部的英文字母
  13. 计算1+22+333+4444...+nnnn的数字和
  14. 面对流氓软件,是逃避还是反击?(连载三、未来的流氓软件)
  15. 华为 2016 校园招聘上机笔试题 题解
  16. 补充layui的复选框必选一项或若干项,不选中或者点击提交都可提示错误信息
  17. 深度协同过滤NCF实践
  18. 流密码:线性同余生成器 LCG
  19. thinkphp3.2 实现 Phpmailer 发送邮件 配置
  20. NanoMsg框架|Android Studio编译NanoMsg源码

热门文章

  1. 【Python】编程笔记10
  2. 产品待办列表的几个最佳实践
  3. 一篇讲清:数据采集中的安全与隐私
  4. 神策数据全新改版数据概览,致力打造多角色、多场景的“工作台”
  5. postman模拟登录接口
  6. 【超详细】遍历Windows进程模块
  7. SCN试验之二 checkpoin scn 与数据库scn的关系
  8. Android零基础入门第20节:CheckBox和RadioButton使用大全
  9. 为什么项目开放源代码之后就变成死项目 很少或几乎不再更新
  10. WINDOWS系统文件讲解