算法与数据结构 其五 二叉查找树
来源:互联网 发布:openwrt 网络重启命令 编辑:程序博客网 时间:2024/05/01 22:18
二叉查找树
树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。一般根节点比左节点大比右节点小。
最基本实现方式
public class BinarySearchTree<E extends Comparable<? super E>>{ //节点 private static class BinaryNode<E>{ E e; BinaryNode<E> left; BinaryNode<E> right; public BinaryNode(E e){ this(e,null,null); } public BinaryNode(E e, BinaryNode<E> left, BinaryNode<E> right) { this.e = e; this.left = left; this.right = right; } } //根节点 private BinaryNode<E> root; public BinarySearchTree(){ root = null; } public void makeEmpty(){ root = null; } public boolean isEmpty(){ return root==null; } //判断是否存在某个节点 public boolean contains(E e){ return contains(e,root); } //判断是否存在某个节点 private boolean contains(E e,BinaryNode<E> node){ if(e==null) return false; //比较大小 int compareResult = e.compareTo(node.e); //新节点比根节点小,向左查找 if(compareResult<0){ return contains(e,node.left); }else if(compareResult>0) { return contains(e,node.right); }else{ return true; } } //找最小 public E findMin(){ if(isEmpty()) throw new NullPointerException(); return findMin(root).e; } private BinaryNode<E> findMin(BinaryNode<E> node){ //用递归编写 if(node==null){ return null; } else if(node.left==null){ return node; }else { return findMin(node.left); } } public E findMax(){ if(isEmpty()) throw new NullPointerException(); return findMax(root).e; } private BinaryNode<E> findMax(BinaryNode<E> node){ //用非递归编写 //不过两种都是线性递增,所以没有多大区别 if(node==null){ return null; } while(node.right!=null) node =node.right; return node; } public void insert(E e){ root = insert(e,root); } private BinaryNode<E> insert(E e,BinaryNode<E> node){ //如果没有根节点,创建新根节点(一般来说不会存在) if(node==null) return new BinaryNode<E>(e,null,null); //比较大小,判断插入位置 int compareResult = e.compareTo(node.e); if(compareResult<0){ node.left = insert(e,node.left); }else if(compareResult>0){ node.right = insert(e,node.right); } //如果相等,就没有必要插入 else ; return node; } public void remove(E e){ root = remove(e,root); return ; } private BinaryNode<E> remove(E e,BinaryNode<E> node){ if(node==null) return node; int compareRsult = e.compareTo(node.e); if(compareRsult<0) { node.left = remove(e,node.left); } else if(compareRsult>0){ node.right = remove(e,node.right); //如果存在两个子节点 }else if(node.left!=null && node.right!=null ){ //找到右节点的最小节点 node.e = findMin(node.right).e; //用右节点的最小节点去代替被移除的节点 node.right = remove(node.e,node.right); } //只有一个子节点 else{ //使其子节点代替该节点 node = (node.left !=null)?node.left:node.right; } return node; } public void printTree(){ if(isEmpty()) System.out.println("空树"); else printTree(root); } private void printTree(BinaryNode<E> node){ if(node!=null){ //左 printTree(node.left); //中 System.out.println(node); //右 printTree(node.right); } }}
当然上面的代码时从书上码下来的(逃
阅读全文
0 0
- 算法与数据结构 其五 二叉查找树
- 算法与数据结构 其五 (补充)函数对象实现查找二叉树
- 数据结构与算法(二叉查找树)
- 数据结构与算法06:二叉查找树
- 《数据结构与算法分析》--二叉查找树
- <数据结构与算法>之二叉查找树
- 数据结构与算法_二叉查找树
- (数据结构与算法分析 五)------二叉查找树的实现( Java语言描述)
- Java数据结构与算法解析(五)——二叉查找树
- Java数据结构与算法解析(五)——二叉查找树
- 数据结构与算法分析-树、二叉树、二叉查找树
- 数据结构与算法JavaScript - 二叉树和二叉查找树
- 【数据结构与算法分析】二叉查找树与AVL树
- 数据结构查找算法之二叉查找树
- 数据结构与算法分析-二叉查找树的实现
- 【数据结构与算法基础】二叉查找树 / Binary Search Tree
- 【算法与数据结构】查找二叉树的实现
- 数据结构与算法简记:二叉查找树相关操作
- C# 图片Base64 编码,图片格式转换
- 安卓特效 界面控件 直接动态图预览 源码
- python自然语言处理(一)
- Oracle PL/SQL开发基础(第三十三弹:EXCEPTION_INIT)
- ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释
- 算法与数据结构 其五 二叉查找树
- 固态硬盘安装Windows10
- linux环境下文件的操作
- ssh(1)——ssh定义及验证
- 再谈字符串操作
- Web前端学习日记16------面试复盘
- Angular内置指令
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- 求Integer中二进制1的个数