数据结构之二叉查找树
2017-04-15 13:47
369 查看
package tree; public class BinarySearchTree<T extends Comparable<? super T>>{ private BinaryNode<T> root; private static class BinaryNode<T>{ T element; //data BinaryNode<T>left; //left child BinaryNode<T>right; //right child public BinaryNode(T element) { constructor stub this(element, null, null); } public BinaryNode(T theElement,BinaryNode<T> theLeft,BinaryNode<T>theRight) { constructor stub left=theLeft; element=theElement; right=theRight; } } public BinarySearchTree(){ root=null; } public void makeEmpty(){ root=null; } public boolean isEmpty(){ return root==null; } public boolean contains(T value){ return contains(value,root); } public T findMin(){ return findMin(root).element; } public T findMax(){ return findMax(root).element; } public void insert(T value){ root=insert(value, root); } public void remove(T value){ root=remove(value, root); } //反转二叉树 public void invertBinaryTree(BinaryNode<T> node){ if (node==null) { return; } BinaryNode<T> temp=node.left; node.left=node.right; node.right=temp; invertBinaryTree(node.left); invertBinaryTree(node.right); } public void printTree(){ if (isEmpty()) { System.out.println("Empty Tree"); } else { printTree(root); } } //中序遍历 private void printTree(BinaryNode<T> node){ if (node!=null) { printTree(node.left); System.out.println(node.element); printTree(node.right); } } private int height(BinaryNode<T> node){ if (node==null) { return -1; } else { return 1+Math.max(height(node.left), height(node.right)); } } private boolean contains(T value,BinaryNode<T> node){ if (node==null) { return false; } int compareResult=value.compareTo(node.element); if (compareResult<0) { return contains(value, node.left); } else if (compareResult>0) { return contains(value, node.right); } else { return true; } } private BinaryNode<T> findMin(BinaryNode<T> node){ if (node==null) { return null; } else if (node.left==null) { return node; } return findMin(node.left); } private BinaryNode<T> findMax(BinaryNode<T> node){ if (node==null) { return null; } else if (node.right==null) { return node; } return findMax(node.right); } private BinaryNode<T> insert(T value,BinaryNode<T> node){ if (node==null) { return new BinaryNode<T>(value, null, null); } int compareResult=value.compareTo(node.element); if (compareResult<0) { node.left=insert(value, node.left); } else if (compareResult>0) { node.right=insert(value, node.right); } else { } return node; } private BinaryNode<T> remove(T value,BinaryNode<T>node){ if (node==null) { return node; } int compareResult=value.compareTo(node.element); if (compareResult<0) { node.left=remove(value, node.left); } else if (compareResult>0) { node.right=remove(value, node.right); } else if (node.left!=null && node.right!=null) { //有两个孩子 node.element=findMin(node.right).element; node.right=remove(node.element, node.right); } else { node=(node!=null)?node.left:node.right; } return node; } }
相关文章推荐
- 【转】图解数据结构 —— 二叉查找树及平衡二叉查找树
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- 【数据结构】二叉查找树【续】之非递归遍历
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- 【数据结构】二叉查找树
- Pku acm 2075 Tangled in Cables数据结构题目解题报告(十一)最小生成树:prim算法&amp;amp;二叉查找树
- 数据结构练手——template之二叉查找树
- 浅谈算法和数据结构: 七 二叉查找树
- 《 常见算法与数据结构》符号表ST(3)——二叉查找树 (附动画)
- 【图解数据结构】二叉查找树
- 数据结构(6)——二叉查找树及平衡二叉查找树
- [数据结构]二叉查找树 简单实现
- 数据结构(Java)——二叉查找树
- Pku acm 2075 Tangled in Cables数据结构题目解题报告(十一)最小生成树:prim算法&amp;amp;二叉查找树
- 数据结构:二叉查找树(C语言实现)
- 重学数据结构007——二叉查找树
- 数据结构: 二叉查找树(BST)
- 学习数据结构 二叉查找树(binary search tree)
- 【学习点滴-数据结构-二叉树】二叉查找树源码实现
- 数据结构与算法4:二叉树1(二叉查找树)