二叉搜索树
来源:互联网 发布:手机网络助手下载 编辑:程序博客网 时间:2024/05/20 01:08
package 第四章2;import java.util.LinkedList;import java.util.Queue;import javax.xml.bind.Unmarshaller;public class BinarySearchTree2<T extends Comparable<? super T>>{ Node<T> root; public BinarySearchTree2() { root=null; } public static class Node<T> { T data; Node<T> left; Node<T> right; public Node(T data) {this.data=data;this.left=null;this.right=null;} public Node(T data,Node<T> left,Node<T> right) {this.data=data;this.left=left;this.right=right;} } public void insert(T x) { root=insert(x,root); } private Node<T> insert(T x, Node<T> root) { if(root==null) return new Node<T>(x,null, null); int compareResult=x.compareTo(root.data); if(compareResult<0) root.left=insert(x, root.left); else if(compareResult>0) root.right=insert(x, root.right); else ; return root; } public void remove(T x) { root=remove(x, root); } private Node<T> remove(T x,Node<T> root) { if(root==null) ;// do nothing ,not found int compareResult=x.compareTo(root.data); if(compareResult<0) root.left=remove(x, root.left); else if(compareResult>0) root.right=remove(x, root.right); else if(root.left!=null && root.right!=null) { T element=findMin(root.right); root.data=element; root.right=remove(element, root.right); } else root=root.left!=null?root.left:root.right; return root; } public T findMin() { return findMin(root); } public T findMin(Node<T> root) { Node<T> p=root; if (p==null) { throw new RuntimeException("当前二叉树为空树"); } while(p.left!=null) { p=p.left; } return p.data; } public T findMax() { Node<T> p=root; if (p==null) { throw new RuntimeException("当前二叉树为空树"); } while(p.right!=null) { p=p.right; } return p.data; } public void layerview() { LinkedList<Node<T>> queue=new LinkedList<>(); queue.addLast(root); Node<T> p; while(!queue.isEmpty()) { p=queue.removeFirst(); System.out.print(p.data+" "); if(p.left!=null) queue.addLast(p.left); if(p.right!=null) queue.addLast(p.right); }System.out.println(); } public static void main(String[] args) { BinarySearchTree2<Integer> tree=new BinarySearchTree2<Integer>(); tree.insert(3); tree.insert(13); tree.insert(43); tree.insert(21); tree.insert(99); tree.insert(65); tree.insert(24); tree.insert(45); tree.insert(77); tree.layerview(); System.out.println(tree.findMin()); System.out.println(tree.findMax()); tree.remove(99); tree.layerview(); tree.remove(21); tree.layerview(); }}
阅读全文
0 0
- 【二叉搜索数】HDU3791二叉搜索树
- 二叉树--二叉搜索树
- 【二叉树】二叉搜索树
- 二叉树- 二叉搜索树
- 【搜索树】二叉搜索树
- 二叉搜索树BSTree
- 二叉搜索树
- 二叉搜索树
- 二叉搜索树
- 最优二叉搜索树
- 二叉搜索树
- 二叉搜索树
- HDOJ3791 二叉搜索树
- 二叉查找树搜索
- 二叉搜索树
- 二叉搜索树
- BST 二叉搜索树
- 二叉搜索树
- thinkphp框架中jquery $.post()用法详解
- iOS __block和__weak的区别
- pandas将类别属性转化为数值属性的方法
- kaggle Code :House Prices: Advanced Regression Techniques 回归
- C#与C++代码互相调用
- 二叉搜索树
- 再读SIFT理论及源码
- HDU 1847(Good Luck in CET-4 Everybody!) 巴什博弈 Java
- 单调队列入门
- 查找——线性索引查找
- unix 02
- Hbase数据库的一些基础知识
- 【AndroidManifest.xml详解】Manifest属性之versionCode,versionName
- 应用CXF开发RESTful风格的WebService入门实例