数据结构-二叉搜所树java实现
2014-03-19 16:29
309 查看
package com.data.struct; /** * 二叉搜索树 * @author Administrator * */ public class BinarySearchTree { private Node root; public BinarySearchTree(int[]data){ for(int i=0;i<data.length;i++){ Node node=new Node(); node.setValue(data[i]); insert(node); } } /** * 中序遍历 */ public void inorderTreeWalk(){ innerInorderTreeWalk(root); System.out.println(); } /** * 中序遍历 */ private void innerInorderTreeWalk(Node node){ if(node!=null){ innerInorderTreeWalk(node.left); System.out.print("-->"+node.value); innerInorderTreeWalk(node.right); } } /** * 先序遍历 */ public void preorderWalk(){ innerPreorderWalk(root); System.out.println(); } private void innerPreorderWalk(Node node){ System.out.print("-->"+node.value); innerPreorderWalk(node.left); innerPreorderWalk(node.right); } /** * 后续遍历 */ public void postorderWalk(){ innerPostorderWalk(root); System.out.println(); } private void innerPostorderWalk(Node node){ innerPostorderWalk(node.left); innerPostorderWalk(node.right); System.out.print("-->"+node.value); } /** * 查找值为value的节点 * @param value * @return */ public Node search(int value){ return innerSearch(root,value); } private Node innerSearch(Node node,int value){ if(node==null||node.value==value){ return node; } if(node.value>value){ return innerSearch(node.left,value); }else{ return innerSearch(node.right,value); } } /** * 返回最小值节点 * @return */ public Node minimum(){ return innerMinimum(root); } private Node innerMinimum(Node node){ if(node.left!=null){ return innerMinimum(node.left); } return node; } /** * 返回最大值节点 * @return */ public Node maximum(){ return innerMaximum(root); } private Node innerMaximum(Node node){ if(node.right!=null){ return innerMaximum(node.right); } return node; } /** * 返回给定节点的后继结点 * @param node * @return */ public Node successor(Node node){ if(node.right!=null){ return innerMinimum(node.right); } Node y=node.parent; while(y!=null&&y.right==node){ node=y; y=y.parent; } return y; } public void insert(int value){ Node node=new Node(); node.setValue(value); insert(node); } /** * 插入节点 * @param node */ public void insert(Node node){ Node y=null; Node x=root; while(x!=null){ y=x; if(node.value<x.value){ x=x.left; }else{ x=x.right; } } node.parent=y; if(y==null){ root=node; }else if(y.value>node.value){ y.left=node; }else{ y.right=node; } } private void transplant(Node u,Node v){ if(u.parent==null){ root=v; }else if(u==u.parent.left){ u.parent.left=v; }else{ u.parent.right=v; } if(v!=null){ v.parent=u.parent; } } public void delete(int value){ delete(search(value)); } /** * 删除节点 * @param node */ public void delete(Node node){ if(node.left==null){ transplant(node,node.right); }else if(node.right==null){ transplant(node,node.left); }else{ Node y=innerMinimum(node.right); if(y.parent!=node){ transplant(y,y.right); y.right=node.right; y.right.parent=y; } transplant(node,y); y.left=node.left; y.left.parent=y; } } private static class Node{ private Node left; private Node right; private Node parent; private int value; public Node getLeft() { return left; } public void setLeft(Node left) { this.left = left; } public Node getRight() { return right; } public void setRight(Node right) { this.right = right; } public Node getParent() { return parent; } public void setParent(Node parent) { this.parent = parent; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } public static void main(String[] args) { int [] data=new int[]{8,3,2,6,3,9,1}; BinarySearchTree tree=new BinarySearchTree(data); tree.inorderTreeWalk(); tree.insert(5); tree.inorderTreeWalk(); tree.delete(3); tree.inorderTreeWalk(); } }
相关文章推荐
- 【算法数据结构Java实现】欧几里得算法
- 数据结构笔记--二叉查找树概述以及java代码实现
- Java数据结构之链表的实现
- 程序员面试题:常见数据结构的实现(JAVA版)
- java实现的Trie树数据结构
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 数据结构 - 红黑树(Red Black Tree)删除详解与实现(Java)
- 【数据结构】-冒泡排序法Java实现
- Java 数据结构数组实现(增删改查)
- 数据结构(三) Java实现静态链表的顺序新增、指定位置新增和删除
- 重温数据结构:二叉查找树的java实现
- 数据结构---快速排序---java与c++实现
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- 数据结构--图 的JAVA实现(下)
- java中的数据结构---栈、队列和树的实现
- java 数据结构 ArrayList基本的实现
- Java中常见数据结构:list与map -底层如何实现
- java实现的stack数据结构
- 数据结构学习之链表的Java实现
- 探究数据结构之链表Java代码实现(二)