数据结构之二叉搜索树的实现
2015-03-04 15:03
183 查看
二叉搜索树的接口类
二叉搜索树的链接存储类的实现
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1617238
public interface BinarySearchTree extends BinaryTree { Object find(Object obj); Object update(Object obj); boolean insert(Object obj); boolean delete(Object obj); void ascend(); }
二叉搜索树的链接存储类的实现
public class LinkBinarySearchTree extends LinkBinaryTree { public LinkBinarySearchTree(){ super(); } public LinkBinarySearchTree(BTreeNode st){ super(st); } public Object find(Object obj){ if(root==null) return null; BTreeNode st=root; while(st!=null){ if(((Comparable)obj).compareTo(st.element)==0) return st.element; else if(((Comparable)obj).compareTo(st.element)<0) st=st.left; else st=st.right; } return null; } public Object update(Object obj){ if(root==null) return null; BTreeNode st=root; while(st!=null){ if(((Comparable)obj).compareTo(st.element)==0){ Object x=st.element; st.element=obj; return x; } else if(((Comparable)obj).compareTo(st.element)<0) st=st.left; else st=st.right; } return null; } public boolean insert(Object obj){ BTreeNode st=root,pt=null; while(st!=null){ pt=st; if(((Comparable)obj).compareTo(st.element)==0) return false; else if(((Comparable)obj).compareTo(st.element)<0) st=st.left; else st=st.right; } BTreeNode s=new BTreeNode(obj); if(pt==null) root=s; else if(((Comparable)obj).compareTo(pt.element)<0) pt.left=s; else pt.right=s; return true; } public boolean delete(Object obj){ if(root==null) return false; BTreeNode st=root,pt=null; while(st!=null){ if(((Comparable)obj).compareTo(st.element)==0) break; else if(((Comparable)obj).compareTo(st.element)<0){ pt=st;st=st.left; } else{ pt=st;st=st.right; } } if(st==null) return false; if(st.left==null&&st.right==null){ if(st==root) root=null; else if(pt.left==st) pt.left=null; else pt.right=null; } else if(st.left==null||st.right==null){ if(st==root) if(st.left==null) root=st.right;else root=st.left; else if(pt.left==st&&st.left==null) pt.left=st.right; else if(pt.left==st&&st.right==null) pt.left=st.left; else if(pt.right==st&&st.left==null) pt.right=st.right; else if(pt.right==st&&st.right==null) pt.right==st.left; } else if(st.left!=null&&st.right!=null){ BTreeNode s1=st,s2=st.left; while(s2.right!=null){ s1=s2;s2=s2.right; } st.element=s2.element; if(s1==st) st.left=s2.left; else s1.right=s2.left; } return true; } public void ascend(){traverseBTree("inOrder");} }客户端调试运行代码
public class Example{ public static void main(String[] args) { BinarySearchTree bst=new LinkBinarySearchTree(); Integer []a={23,45,89,40,73,12,49,72,20,44}; for(int i=0;i<a.length;i++) bst.insert(a[i]); System.out.print("二叉搜索树bst的广义表形式:");bst.printBTree(); System.out.print("前序:");bst.traverseBTree("preOrder"); System.out.print("中序:");bst.traverseBTree("inOrder"); System.out.print("后序:");bst.traverseBTree("postOrder"); System.out.print("按层:");bst.traverseBTree("levelOrder"); System.out.print("升序:");bst.ascend(); System.out.println("深度:"+bst.depthBTree()); System.out.println("结点数:"+bst.countBTree()); System.out.println("查找38的结果:"+bst.find(38)); System.out.println("删除73的结果:"+bst.delete(73)); System.out.println("删除40的结果:"+bst.delete(40)); System.out.println("删除23的结果:"+bst.delete(23)); System.out.print("运算后的二叉搜索树bst的广义表形式:");bst.printBTree(); } }
本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1617238
相关文章推荐
- 数据结构--二叉搜索树的实现(C++)
- 数据结构-二叉搜索树(Binary Search Tree)的C++实现模板
- 二叉搜索树数据结构完整实现
- 数据结构——树(9)——二叉搜索树的操作实现C++代码
- 【数据结构】之实现二叉搜索树
- javascript数据结构之二叉搜索树实现方法
- 数据结构 二叉搜索树实现
- 【数据结构】二叉搜索树(增、删、查)的递归与非递归实现
- 【数据结构】二叉搜索树的插入,删除,查找等基本操作的实现
- 《C++实现数据结构》:二叉搜索树
- 【算法与数据结构】二叉搜索树的Java实现
- 数据结构(一)二叉搜索树-递归实现
- 二叉搜索树的实现(数据结构中的“hello,world”)
- 数据结构-二叉树(应用篇)-之二叉搜索树 C和C++的实现
- 二叉搜索树基本数据结构实现
- 数据结构(一)二叉搜索树-递归实现
- 第4章 树 - 二叉搜索树数据结构实现
- javascript数据结构之二叉搜索树实现方法
- 数据结构-二叉搜索树的实现
- 【数据结构】二叉搜索树的递归与非递归实现