二叉查找树 Java 代码


二叉查找树 代码

public class BSTNode {
      private int value;
      private BSTNode left;
      private BSTNode right;
      public BSTNode(int value) {
            this.value = value;
            left = null;
            right = null;
      }
public boolean add(int value) {
            if (value == this.value)
                  return false;

                  if (left == null) {
                        left = new BSTNode(value);
                        return true;
                  } else
                        return left.add(value);
            } else if (value > this.value) {
                  if (right == null) {
                        right = new BSTNode(value);
                        return true;
                  } else
                        return right.add(value);
            }
            return false;
      }
public boolean search(int value) {
            if (value == this.value)
                  return true;

                  if (left == null)
                        return false;
                  else
                        return left.search(value);
            } else if (value > this.value) {
                  if (right == null)
                        return false;
                  else
                        return right.search(value);
            }
            return false;
      }
public boolean remove(int value, BSTNode parent) {

                  if (left != null)
                        return left.remove(value, this);
                  else
                        return false;
            } else if (value > this.value) {
                  if (right != null)
                        return right.remove(value, this);
                  else
                        return false;
            } else {
                  if (left != null && right != null) {
                        this.value = right.minValue();
                        right.remove(this.value, this);
                  } else if (parent.left == this) {
                        parent.left = (left != null) ? left : right;
                  } else if (parent.right == this) {
                        parent.right = (left != null) ? left : right;
                  }
                  return true;
            }
      }
      public int minValue() {
            if (left == null)
                  return value;
            else
                  return left.minValue();
      }
}
public class BinarySearchTree {
      private BSTNode root;
      public BinarySearchTree() {
            root = null;
      }
public boolean add(int value) {
            if (root == null) {
                  root = new BSTNode(value);
                  return true;
            } else
                  return root.add(value);
      }
public boolean search(int value) {
            if (root == null)
                  return false;
            else
                  return root.search(value);
      }
public boolean remove(int value) {
            if (root == null)
                  return false;
            else {
                  if (root.getValue() == value) {
                        BSTNode auxRoot = new BSTNode(0);
                        auxRoot.setLeftChild(root);
                        boolean result = root.remove(value, auxRoot);
                        root = auxRoot.getLeft();
                        return result;
                  } else {
                        return root.remove(value, null);
                  }
            }
      }
}

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《二叉查找树 Java 代码
本文地址:https://www.zhiletu.com/archives-7809.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微