二叉查找树

来源:互联网 发布:php最好的语言 编辑:程序博客网 时间:2024/06/04 18:09

二叉树:

二叉树是一棵树,其中每个节点都不能有多于两个的儿子。对于二叉树而言,对于树中的每个节点X,它的左子树中所有项的值小于X中的项,它的右字数中的所有项的值大于X项的值。

我们在删除二叉查找树中的节点时,如果要删除的节点具有两个子节点时,一般的删除策略是用其右子树中的最小数据代替该节点的数据并递归地删除那个节点。

  public class BinarySearchTree<T extends Comparable<? super T>> {private BinaryNode<T> root;public void printTree() {if(isEmpty()) {System.out.println("empty tree");}else {printTreeBack(root);}}//遍历二叉树,后序遍历private void printTreeBack(BinaryNode<T> t) {if(t != null) {printTreeBack(t.rightNode);System.out.println(t.data);printTreeBack(t.leftNode);}}//遍历二叉树,先序遍历private void printTreeFirst(BinaryNode<T> t) {if(t != null) {System.out.println(t.data);printTreeFirst(t.leftNode);printTreeFirst(t.rightNode);}}//遍历二叉树,中序遍历private void printTreeMiddle(BinaryNode<T> t) {if(t != null) {printTreeMiddle(t.leftNode);System.out.println(t.data);printTreeMiddle(t.rightNode);}}public BinarySearchTree() {this.root = null;}public boolean isEmpty(){return this.root == null;}public void insert(T element){root = insert(element,root);}private BinaryNode<T> insert(T element,BinaryNode<T> node){if(node == null){return new BinaryNode<T>(element,null,null); }int intCompare = element.compareTo(node.data);if(intCompare < 0){node.leftNode = insert(element,node.leftNode);}else if(intCompare > 0){node.rightNode = insert(element,node.rightNode);}return node;}public boolean contains(T element){return contains(element,root);}private boolean contains(T element,BinaryNode<T> node){if(node == null){return false;}int intCompare = element.compareTo(node.data);if(intCompare < 0){return contains(element,node.leftNode);}else if(intCompare > 0){return contains(element,node.rightNode);}else{return true;}}public void remove(T element){remove(element,root);}private BinaryNode<T> remove(T element,BinaryNode<T> node){if(node == null){return node;}int intCompare = element.compareTo(node.data);if(intCompare < 0){node.leftNode = remove(element,node.leftNode);}else if(intCompare > 0){node.rightNode = remove(element,node.rightNode);}else if(node.leftNode != null && node.rightNode != null){node.data = findMin(node).data;node.rightNode = remove(node.data,node.rightNode);}else{node = (node.leftNode != null) ? node.leftNode : node.rightNode;}return node;}private BinaryNode<T> findMin(BinaryNode<T> node){if(node == null){return null;}else if(node.leftNode == null){return node;}else{return findMin(node.leftNode);}}private BinaryNode<T> findMax(BinaryNode<T> node){if(node == null){return null;}while(node.rightNode != null){node = node.rightNode;}return node;}private class BinaryNode<T>{private T data;private BinaryNode<T> leftNode;private BinaryNode<T> rightNode;public BinaryNode(T data, BinaryNode<T> leftNode,BinaryNode<T> rightNode) {this.data = data;this.leftNode = leftNode;this.rightNode = rightNode;}public BinaryNode(T element) {this(element,null,null);}}}


0 0
原创粉丝点击