二叉查找树(java版本)
来源:互联网 发布:网络的好处具体事例 编辑:程序博客网 时间:2024/06/16 17:45
package BinarySearch;public class BinarySearchTree { private Node root = null; public BinarySearchTree(int[] elements) { if (elements != null && elements.length >= 1) { for (int element : elements) { insert(element); } } } public boolean delete(int value) { return operation(value, false, true); } private void deleteNode(Node deleteNode) { boolean isLeftNull = deleteNode.left == null; boolean isRightNull = deleteNode.right == null; if (isLeftNull && isRightNull) { deleteNode = null; } else if (isLeftNull) {//如果只有左子树为空,把右子树直接提上来就好了 Node rightNode = deleteNode.right; deleteNode.value = deleteNode.right.value; deleteNode.left = rightNode.left; deleteNode.right = rightNode.right; } else if (isRightNull) {//如果只有右子树为空,把左子树直接提上来就好了 Node leftNode = deleteNode.left; deleteNode.value = deleteNode.left.value; deleteNode.left = leftNode.left; deleteNode.right = leftNode.right; } else { //如果左右都不为空的话,那么就找到 被删除节点的左节点的最右节点, //将它顶替当前的被删除节点,然后将此最右节点的左子树放到 最右节点的父节点的右子树 Node tempLeftNode = deleteNode.left; Node lastLeftTreeRightNode = tempLeftNode; Node lastLeftTreeRightNodeParent = null; while (lastLeftTreeRightNode.right != null) { lastLeftTreeRightNodeParent = lastLeftTreeRightNode; lastLeftTreeRightNode = lastLeftTreeRightNode.right; } deleteNode.value = lastLeftTreeRightNode.value; if (lastLeftTreeRightNodeParent != null) { lastLeftTreeRightNodeParent.right = lastLeftTreeRightNode.left; } lastLeftTreeRightNode = null; } } public boolean search(int value) { return !operation(value, false, false); } public boolean insert(int value) { return operation(value, true, false); } private boolean operation(int value, boolean insert, boolean delete) { if (root == null) {//根节点为空,直接new一个Node if (insert) root = new Node(value); else if (delete) return false; return true; } Node tempRoot = root; while (true) { if (value == tempRoot.value) {//如果存在该元素的话,那么不用插入了 if (delete) { deleteNode(tempRoot); return true; } return false; } else if (value > tempRoot.value) { if (tempRoot.right == null) { if (insert) { tempRoot.right = new Node(value); } else if (delete) { return false; } return true; } tempRoot = tempRoot.right; } else { if (tempRoot.left == null) { if (insert) { tempRoot.left = new Node(value); } else if (delete) { return false; } return true; } tempRoot = tempRoot.left; } } } private static class Node { private int value; private Node left; private Node right; public Node(int value) { this.value = value; } }}
阅读全文
0 0
- 二叉查找树(java版本)
- java二叉查找树
- java二叉查找树
- 二叉查找树 Java
- 二叉查找树实现(C语言版本)
- AVL平衡二叉查找树实现(C语言版本)
- Java实现BST(二叉查找树)
- 平衡二叉查找树(JAVA)
- java实现(1)-二叉查找树
- 二叉查找树(二叉排序树)Java实现
- Java实现二叉查找树(BST)
- 二叉查找树(自己写的版本)
- java 二叉树(五)查找二叉树中的节点
- Java基础 - 排序二叉树(二叉查找树)
- 二叉树---(2)二叉查找树之Java实现
- 二叉查找树--查找、删除、插入(Java实现)
- (Java实现)二叉查找树--查找、删除、插入
- (Java实现)二叉查找树--查找、删除、插入
- input type='submit'会刷新界面
- [JAVA] Hibernate API简述
- Spring 框架简介
- GridView简单应用
- spinner的下拉菜单把显示菜单覆盖了
- 二叉查找树(java版本)
- Redis学习记录(一)
- 文档类型声明<!DOCTYPE>
- Vegas怎么调色?
- linux
- TabLayout与ViewPager联用
- Git可视化教程——Git Gui的使用
- redis 的两种持久化方式及原理
- 说说自己遇到的一个问题