查找算法(3)--二叉树查找
来源:互联网 发布:nodejs连接sqlserver 编辑:程序博客网 时间:2024/05/16 10:35
二叉查找树的定义:
一棵二叉查找树是一棵可能为空的二叉树形,并且关键词各不相同,二叉查找树中的任一结点P,他的左子树中结点的关键词都小于KEY(p),而右子树中结点的关键词都大于kEY(p),并且节点P的左右子树也都是二叉查找树
代码展示:
package com.jls.tree;public class BinarySearchTree<T extends Comparable<T>>{ private static class Node<T>{ private T data; private Node<T> left; private Node<T> right; public Node(T data){ this(data,null,null); } public Node(T data, Node<T> left, Node<T> right) { this.data = data; this.left = left; this.right = right; } } //私有变量 根节点root private Node<T> root; //无参构造函数,根节点为null public BinarySearchTree(){ root=null; } //清空二叉查找树 public void makeEmpty(){ root=null; } //判断树是否为空 public boolean isEmpty(){ return root==null; } //查找集合中是否有元素value,有返回true public boolean contains(T value){ return contains(value,root); } private boolean contains(T value, Node<T> t) { if(t==null){ return false; } int result=value.compareTo(t.data); if(result<0){ return contains(value,t.left); }else if(result>0){ return contains(value,t.right); }else{ return true; } } //查找集合中的最小值 public T findMin(){ return findMin(root).data; } private Node<T> findMin(Node<T> t) { if(t==null){ return null; }else if(t.left==null){ return t; } return findMin(t.left); } //查找集合中的最大值 public T findMax(){ return findMax(root).data; } private Node<T> findMax(Node<T> t) { if(t!=null){ while(t.right!=null){ t=t.right; } } return t; } //插入元素 public void insert(T value){ root =insert(value,root); } private Node<T> insert(T value, Node<T> t) { if(t==null){ return new Node(value,null,null); } int result=value.compareTo(t.data); if(result<0){ t.left=insert(value,t.left); }else if(result>0){ t.right=insert(value,t.right); } return t; } //移除元素 public void remove(T value){ root=remove(value,root); } private Node<T> remove(T value, Node<T> t) { if(t==null){ return t; } int result=value.compareTo(t.data); if(result<0){ t.left=remove(value,t.left); }else if(result>0){ t.right=remove(value,t.right); }else if(t.left!=null&&t.right!=null){//如果被删除节点有两个儿子 //1.当前节点值被其右子树的最小值代替 t.data=findMin(t.right).data; //将右子树的最小值删除 t.right=remove(t.data, t.right); }else{ //如果被删除节点是一个叶子 或只有一个儿子 t=(t.left!=null)?t.left:t.right; } return t; } //中序遍历打印 public void printTree(){ printTree(root); } private void printTree(Node<T> t) {` if(t!=null){ printTree(t.left); System.out.println(t.data); printTree(t.right); } }}
阅读全文
1 0
- 查找算法(3)--二叉树查找
- 查找算法总结(3)--二叉查找树
- 查找算法 顺序查找 二分查找 二叉树查找 算法
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
- 查找(3)---二叉查找树
- 查找算法(二叉搜索树查找,二分查找,hash查找)
- 查找、检索 算法-总结3 平衡二叉查找树 [AVL]
- java查找算法_003二叉树查找
- 数据结构查找算法之二叉查找树
- 二叉查找树之查找算法
- 查找算法 之 二叉查找树
- 查找算法——二叉树查找
- 查找算法之二叉查找树
- 查找算法——二叉查找树
- 算法系列笔记3(二叉查找树)
- 记录第一天~
- JVM中的MaxHeapSize值不一致问题
- Mybatis(一)
- iOS-响应者链条
- MFC 树控件 如何为二级节点动态地添加三、四级节点
- 查找算法(3)--二叉树查找
- 2001: [Hnoi2010]City 城市建设
- Android ListView初始化简单分析
- 16+-号的用途
- UITableView常用设置
- Android中PIckView的使用
- 没有青春不迷惘!
- java标准异常(转载)
- 关于tableView:cellForRowAtIndexPath的解释