- package seventh;
- public class SearchTree {
- public SearchTree leftNode=null;
- public SearchTree rightNode=null;
- public SearchTree cTree=null;
- public int data;
- public SearchTree(int data){
- this.data=data;
- }
- /**
- * 清空整棵树
- * @param tree 代表要从哪个节点开始清空,默认使用根节点
- */
- public void emptyTree(){
- SearchTree tree=this;
- if(tree.leftNode!=null)
- {
- emptyTree(tree.leftNode);
- }
- if(tree.rightNode!=null)
- {
- emptyTree(tree.rightNode);
- }
- tree=null;
- }
- public void emptyTree(SearchTree tree){
- if(tree.leftNode!=null)
- {
- emptyTree(tree.leftNode);
- }
- if(tree.rightNode!=null)
- {
- emptyTree(tree.rightNode);
- }
- tree=null;
- }
- /**
- * 递归查找
- * @param data表示要被查找的数据
- * @param data表示要从哪个节点开始查找, 默认使用根节点
- * @return
- */
- public SearchTree findNode(int data){
- SearchTree tree=this;
- if(data<tree.data)
- {
- return findNode(tree.leftNode,data);
- }
- else if(data>tree.data)
- {
- return findNode(tree.rightNode,data);
- }
- else
- return tree;
- }
- public SearchTree findNode(SearchTree tree,int data){
- if(tree==null){
- return null;
- }
- else if(data<tree.data)
- {
- return findNode(tree.leftNode,data);
- }
- else if(data>tree.data)
- {
- return findNode(tree.rightNode,data);
- }
- else
- return tree;
- }
- /*查找最小的节点
- * @parameter tree 代表要从哪个节点开始查,默认使用根
- *
- */
- public SearchTree findMin(){
- SearchTree tree=this;
- if(tree.leftNode!=null)
- {
- return findMin(tree.leftNode);
- }
- else
- return this;
- }
- public SearchTree findMin(SearchTree tree){
- if(tree.leftNode!=null)
- {
- return findMin(tree);
- }
- else
- return tree;
- }
- /**
- *删除二叉排序树种的节点 ,分两种情况(1.只有一个孩子或者没有孩子,那么只要删除该叶子节点或者使用孩子节点的值替换自己
- *2.有两个孩子,使用节点的右孩子中最小的节点值替换自己,并删除右孩子中带有最小值得那个节点
- * @param a 代表要删除的节点的值
- * @param tree 默认使用被查找到的与被删除data一样的值得节点,也可以显示的指定要被删除的节点
- */
- public void deleteNode(int a){
- SearchTree tree=findNode(a);
- if(tree==null){
- return;
- }
- //当被删除的节点有两个孩子的情况
- if(tree.leftNode!=null&&tree.rightNode!=null)
- {
- SearchTree sTree=findMin(tree);
- tree.data=sTree.data;
- deleteNode(sTree,sTree.data);
- }
- //当被删除的节点有一个孩子或者没有的情况
- else
- {
- if(tree.leftNode==null)
- {
- tree=tree.rightNode;
- }
- else if(tree.rightNode==null)
- {
- tree=tree.leftNode;
- }
- }
- }
- public void deleteNode(SearchTree tree,int a){
- if(tree.leftNode!=null&&tree.rightNode!=null)
- {
- SearchTree sTree=findMin(tree);
- tree.data=sTree.data;
- deleteNode(sTree.data);
- }
- }
- /**
- * 用递归的方法实现插入与 查找方法如初一折
- * @param tree 代表要从哪里开始查找插入节点,默认使用根,如果这个节点的值大于data就递归查询它做节点,反之亦然
- * @param data 代表要插入的数据
- */
- public void insertNode(int data){
- SearchTree tree=this;
- if(data<tree.data)
- {
- insertNode(tree.leftNode,data);
- }
- else if(data>tree.data)
- {
- insertNode(tree.rightNode,data);
- }
- else
- {
- return;
- }
- }
- public void insertNode(SearchTree tree,int data){
- if(tree==null){
- tree=new SearchTree(data);
- }
- else if(data<tree.data)
- {
- insertNode(tree.leftNode,data);
- }
- else if(data>tree.data)
- {
- insertNode(tree.rightNode,data);
- }
- else
- {
- return;
- }
- }
- }
查找树的java实现
原创
©著作权归作者所有:来自51CTO博客作者kv565687167的原创作品,请联系作者获取转载授权,否则将追究法律责任
笔者懒散,各位朋友有什么指教探讨的地方可以在博客留言
上一篇:折半查找JAVA实现
下一篇:我的友情链接
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java平衡树--查找树的新建与树的实现
一棵2-3查找树要么为空,要么满足满足下面两个要求:2-结点含有一个键(及其对应的值)和两条链,左链接指向2-3树中
java 算法 数据结构 查找树 平衡树 -
二插查找树的Java实现
public class BinarySearchTree> { private Node root;//根节点
java 父节点 中序遍历 初始化