设为首页 加入收藏

TOP

二叉搜索树的Java实现(二)
2015-07-16 12:57:18 来源: 作者: 【 】 浏览:14
Tags:搜索 Java 实现
System.out.println("您要查找的是:"+data);
? ? ? ? Node node;
? ? ? ? if((node=searchNode(new Node(data)))==null){
? ? ? ? ? ? System.out.println("树中没有该结点!");
? ? ? ? }else{
? ? ? ? ? ? System.out.println("查找"+node.key+"成功!");
? ? ? ? }
? ? }
? ?
? ? private Node searchNode(Node node){? ? //private供内部调用,搜索结点
? ? ? ? if(node==null){
? ? ? ? ? ? System.out.println("输入为空,查找失败!");
? ? ? ? }else{
? ? ? ? ? ? if(root==null){
? ? ? ? ? ? ? ? System.out.println("该树为空树!");
? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? ? ? //开始查找
? ? ? ? ? ? ? ? boolean isFound=false;? ?
? ? ? ? ? ? ? ? Node x=root;
? ? ? ? ? ? ? ? Node y=null;
? ? ? ? ? ? ? ? while(!isFound&&x!=null){? ? //当查到或者到了叶子节点还没查到时,终结!
? ? ? ? ? ? ? ? ? ? y=x;
? ? ? ? ? ? ? ? ? ? if(node.key==x.key){? ?
? ? ? ? ? ? ? ? ? ? ? ? isFound=true;
? ? ? ? ? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ? ? //通过比较大小往下面查找
? ? ? ? ? ? ? ? ? ? ? ? if(node.key>x.key){? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? x=x.rightChild;
? ? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? ? x=x.leftChild;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(isFound){? ? //没找到的话,在最后返回null
? ? ? ? ? ? ? ? ? ? return y;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return null;
? ? }
? ?
? ? /*
? ? * 获取最大值
? ? */
? ? public void? getMax(){? ?
? ? ? ? Node node;
? ? ? ? if((node=getMaxNode(root))==null){
? ? ? ? ? ? System.out.println("该树为空!");
? ? ? ? }else{
? ? ? ? ? ? System.out.println("最大的结点是:"+node.key);
? ? ? ? }
? ? ? ?
? ? }
? ?
? ? private Node getMaxNode(Node node){? ? //获取最大值
? ? ? ? if(node!=null){
? ? ? ? ? ? Node x=node;
? ? ? ? ? ? Node y=null;
? ? ? ? ? ? while(x!=null){? ? //一直往右遍历直到底就是最大值了!
? ? ? ? ? ? ? ? y=x;
? ? ? ? ? ? ? ? x=x.rightChild;
? ? ? ? ? ? }
? ? ? ? ? ? return y;
? ? ? ? }
? ? ? ? return null;
? ? }
? ?
? ? /*
? ? * 获取最小值
? ? */
? ? public void getMin(){? ?
? ? ? ? Node node;
? ? ? ? if((node=getMinNode(root))==null){
? ? ? ? ? ? System.out.println("该树为空!");
? ? ? ? }else{
? ? ? ? ? ? System.out.println("最小的结点是:"+node.key);
? ? ? ? }
? ? }
? ? private Node getMinNode(Node node){? ? //获取最小值
? ? ? ? if(node!=null){
? ? ? ? ? ? Node x=node;
? ? ? ? ? ? Node y=null;
? ? ? ? ? ? while(x!=null){? ? //一直往左遍历直到底就是最小值了!
? ? ? ? ? ? ? ? y=x;
? ? ? ? ? ? ? ? x=x.leftChild;
? ? ? ? ? ? }
? ? ? ? ? ? return y;
? ? ? ? }
? ? ? ? return null;
? ? }
? ?
? ? /*
? ? * 获取前驱结点
? ? */
? ? public void getPre(int data){? ?
? ? ? ? Node node=null;
? ? ? ? System.out.println(data+"的前驱结点:");
? ? ? ? if((node=getPreNode(searchNode(new Node(data))))==null){
? ? ? ? ? ? System.out.println("该结点不存在或无前驱结点!");
? ? ? ? }else{
? ? ? ? ? ? System.out.println(data+"的前驱结点为:"+node.key);
? ? ? ? }
? ? }
? ?
? ? private Node getPreNode(Node node){? ? //获取前驱结点
? ? ? ? if(node==null){
? ? ? ? ? ? return null;
? ? ? ? }
? ? ? ? if(node.leftChild!=null){? ? //当有左孩子时,前驱结点就是左子树的最大值
? ? ? ? ? ? return getMaxNode(node.leftChild);
? ? ? ? }else{//当不存在左孩子时,前驱结点就是——它的祖先,而且,它在这个祖先的右子树中。这句话自己画图就能理解了
? ? ? ? ? ? Node x=node;
? ? ? ? ? ? Node y=node.parent;
? ? ? ? ? ? while(y!=null&&x==y.leftChild){
? ? ? ? ? ? ? ? x=y;
? ? ? ? ? ? ? ? y=y.parent;
? ? ? ? ? ? }
? ? ? ? ? ? return y;
? ? ? ? }
? ? }
? ?
? ? /*
? ? * 获取后继结点
? ? */
? ? public void getPost(int data){? ?
? ? ? ? Node node=null;
? ? ? ? System.out.println(data+"的后继结点:");
? ? ? ? if((node=getPostNode(searchNode(new Node(data))))==null){
? ? ? ? ? ? System.out.println("该结点不存在或无后继结点!");
? ? ? ? }else{
? ? ? ? ? ? System.out.println(data+"的后继结点为:"+node.key);
? ? ? ? }
? ? }
? ?
? ? private Node getPostNode(Node node){? ? //获取后继结点
? ? ? ? if(node==null){
? ? ? ? ? ? return null;
? ? ? ? }
? ? ? ? if(node.rightChild!=null){? ? //当有右孩子时,前驱结点就是右子树的最小值
? ? ? ? ? ? return getMinNode(node.rightChild);
? ? ? ? }else{//当不存在右孩子时,后继结点就是——它的祖先,而且,它在这个祖先的左子树中。这句话自己画图就能理解了
? ? ? ? ? ? Node x=node;
? ? ? ? ? ? Node y=node.parent;
? ? ? ? ? ? while(y!=null&&x==y.rightChild){
? ? ? ? ? ? ? ? x=y;
? ? ? ? ? ? ? ? y=y.parent;
? ? ? ? ? ? }
? ? ? ? ? ? return y;
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python logging模块可能会令人困.. 下一篇Java编程:组合、继承和代理的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: