数据结构与算法学习笔记:二叉搜索树(上)

  • 写在前面:记录学习《恋上数据结构与算法》的过程。
  • 课程链接地址:https://ke.qq.com/course/385223

目录

二叉搜索树的引入

二叉搜索树(Binary Search Tree)

BST 接口设计

节点

判断不能为空

根节点

添加根节点

添加节点

找到父节点

创建新节点,添加

定义比较接口,元素必须实现接口

改善比较方式,创建比较器

兼容以上两种比较方法

或者使用匿名类

打印BST

推荐几个网站

值相等处理(覆盖原节点)


二叉搜索树的引入

数据结构与算法学习笔记:二叉搜索树(上)_第1张图片

二叉搜索树(Binary Search Tree)

数据结构与算法学习笔记:二叉搜索树(上)_第2张图片

BST 接口设计

数据结构与算法学习笔记:二叉搜索树(上)_第3张图片

数据结构与算法学习笔记:二叉搜索树(上)_第4张图片

节点

数据结构与算法学习笔记:二叉搜索树(上)_第5张图片

判断不能为空

根节点

添加根节点

数据结构与算法学习笔记:二叉搜索树(上)_第6张图片

添加节点

数据结构与算法学习笔记:二叉搜索树(上)_第7张图片

数据结构与算法学习笔记:二叉搜索树(上)_第8张图片

找到父节点

数据结构与算法学习笔记:二叉搜索树(上)_第9张图片

创建新节点,添加

数据结构与算法学习笔记:二叉搜索树(上)_第10张图片

定义比较接口,元素必须实现接口

数据结构与算法学习笔记:二叉搜索树(上)_第11张图片

  • 某种类型元素进行实现

数据结构与算法学习笔记:二叉搜索树(上)_第12张图片

  • BST中调用

 

  • 如果换一种需求,如下方式,年龄小的认为在二叉树中为大的节点

  • 上面把比较判定放在Person里,写死了,没法满足更加灵活的需求

改善比较方式,创建比较器

  • 创建比较器接口

  • 在BST构造函数中调用

数据结构与算法学习笔记:二叉搜索树(上)_第13张图片

数据结构与算法学习笔记:二叉搜索树(上)_第14张图片

  • 根据需求创建具体的比较器

数据结构与算法学习笔记:二叉搜索树(上)_第15张图片

  • 调用创建的比较器

数据结构与算法学习笔记:二叉搜索树(上)_第16张图片

兼容以上两种比较方法

  • 添加不需要比较器的构造函数

数据结构与算法学习笔记:二叉搜索树(上)_第17张图片

数据结构与算法学习笔记:二叉搜索树(上)_第18张图片

  • 在类中实现,使用官方的Compareable

数据结构与算法学习笔记:二叉搜索树(上)_第19张图片

  • 使用官方的Comparator实现自定义比较器

数据结构与算法学习笔记:二叉搜索树(上)_第20张图片

  • 使用自定义的比较器和类中默认提供的

数据结构与算法学习笔记:二叉搜索树(上)_第21张图片

或者使用匿名类

数据结构与算法学习笔记:二叉搜索树(上)_第22张图片

打印BST

  • 工具:https://github.com/CoderMJLee/BinaryTrees
    • 使用步骤
    • 实现BinaryTreelnfo接口
    • 调用打印API 
    • BinaryTrees.println(bst);
  • 实现下面接口
public interface BinaryTreeInfo {
	/**
	 * who is the root node
	 */
	Object root();
	/**
	 * how to get the left child of the node
	 */
	Object left(Object node);
	/**
	 * how to get the right child of the node
	 */
	Object right(Object node);
	/**
	 * how to print the node
	 */
	Object string(Object node);
}

数据结构与算法学习笔记:二叉搜索树(上)_第23张图片

数据结构与算法学习笔记:二叉搜索树(上)_第24张图片

数据结构与算法学习笔记:二叉搜索树(上)_第25张图片

数据结构与算法学习笔记:二叉搜索树(上)_第26张图片

  • 测试1,调用类提供的比较逻辑

数据结构与算法学习笔记:二叉搜索树(上)_第27张图片

数据结构与算法学习笔记:二叉搜索树(上)_第28张图片

数据结构与算法学习笔记:二叉搜索树(上)_第29张图片

  • 测试2,传入比较器

数据结构与算法学习笔记:二叉搜索树(上)_第30张图片

数据结构与算法学习笔记:二叉搜索树(上)_第31张图片

  • 测试3,随机数

数据结构与算法学习笔记:二叉搜索树(上)_第32张图片

数据结构与算法学习笔记:二叉搜索树(上)_第33张图片

  • 重写toString打印Parent

数据结构与算法学习笔记:二叉搜索树(上)_第34张图片

数据结构与算法学习笔记:二叉搜索树(上)_第35张图片

推荐几个网站

http://520it.com/binarytrees/

http://btv.melezinek.cz/binary-search-tree.html

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

https://yangez.github.io/btree-js/

https://www.codelike.in/

值相等处理(覆盖原节点)

数据结构与算法学习笔记:二叉搜索树(上)_第36张图片

  • 重写Person类toString

  • 测试

数据结构与算法学习笔记:二叉搜索树(上)_第37张图片

数据结构与算法学习笔记:二叉搜索树(上)_第38张图片

你可能感兴趣的:(数据结构与算法学习笔记)