二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;
增加 查找 删除 序列化
增加 查找 删除 序列化
import java.util.ArrayList; import java.util.List; public class BinsearTree { private static Node rootNode = null ; private static List<Node> nodelist = new ArrayList<Node>(); private class Node{ private int key; private Node LeftchildNode; private Node rightchildNode; private Node parentNode; Node(int key,Node leftchildNode,Node rightNode,Node parentNode){ this.key = key; this.LeftchildNode = leftchildNode; this.rightchildNode = rightNode; this.parentNode = parentNode; } public int getKey(){ return key; } } public Boolean isEmpty(){ if(rootNode == null){ return true; }else{ return false; } } public void insert(int k){ Node parentNode = null; Node newNode = new Node(k, null, null, null); Node pNode = rootNode; if(rootNode ==null){ rootNode = newNode; return; } while(pNode != null){ parentNode = pNode; if(k<pNode.key){ pNode = pNode.LeftchildNode; }else if(k>pNode.key){ pNode = pNode.rightchildNode; }else{ return; } } if(k<parentNode.key){ parentNode.LeftchildNode = newNode; newNode.parentNode = parentNode; }else{ parentNode.rightchildNode = newNode; newNode.parentNode = parentNode; } } public static void main(String[] args) { BinsearTree nodetreeBinsearTree = new BinsearTree(); System.out.println("查找树是否为空? " + (nodetreeBinsearTree.isEmpty() ? "是" : "否")); int[] src = {9,1,32,4,2,34,5,44,23,11,87,94,31}; for(int k : src){ nodetreeBinsearTree.insert(k); } System.out.println("查找树是否为空? " + (nodetreeBinsearTree.isEmpty() ? "是" : "否")); System.out.println("最小关键字为:" + minnode(rootNode).getKey()); System.out.println("最大关键字为:" + maxnode(rootNode).getKey()); tranver(nodetreeBinsearTree); Node serNode = findnode(23); if(serNode == null){ System.out.println("不含有该结点"); }else{ delate(serNode); } tranver(nodetreeBinsearTree); } private static void delate(Node node) { if(rootNode == null){ System.out.println("树为空"); return; } if(node==rootNode){ rootNode = null; System.out.println("该节点是树的根节点,删除树成功!"); } if(node.LeftchildNode==null && node.rightchildNode ==null){ System.out.println("该节点无子节点"); if(node == node.parentNode.LeftchildNode){ node.parentNode.LeftchildNode = null; }else{ node.parentNode.rightchildNode = null; } System.out.println("删除成功!"); return; } if(node.rightchildNode==null){ System.out.println("该节点有一个左节点"); if(node == node.parentNode.LeftchildNode){ node.parentNode.LeftchildNode = node.LeftchildNode; }else{ node.parentNode.rightchildNode = node.LeftchildNode; } System.out.println("删除成功!"); return; } if(node.LeftchildNode==null){ System.out.println("该节点有一个右节点"); if(node == node.parentNode.LeftchildNode){ node.parentNode.LeftchildNode = node.rightchildNode; }else{ node.parentNode.rightchildNode = node.rightchildNode; } System.out.println("删除成功!"); return; } System.out.println("该节点有两个节点"); Node node2 = maxnode(node.LeftchildNode); if(node == node.parentNode.LeftchildNode){ node.parentNode.LeftchildNode = node2; }else{ node.parentNode.rightchildNode = node2; } if(node2 != node.LeftchildNode){ node2.parentNode.rightchildNode = null; node2.LeftchildNode = node.LeftchildNode; node.LeftchildNode.parentNode = node2.LeftchildNode; } node2.parentNode = node.parentNode; node2.rightchildNode = node.rightchildNode; node.rightchildNode.parentNode = node2.rightchildNode; System.out.println("删除成功!"); } private static Node findnode(int key) { if(rootNode == null){ System.out.println("树为空"); } Node prodeNode = rootNode; while(prodeNode != null){ if(key<prodeNode.key){ prodeNode = prodeNode.LeftchildNode; }else if(key>prodeNode.key){ prodeNode = prodeNode.rightchildNode; }else{ break; } } if(prodeNode != null){ return prodeNode; }else{ return null; } } private static void tranver(BinsearTree tree) { inmidtranver(); System.out.println("对树进行有序化:"); for(Node node : nodelist){ System.out.print(node.key+" "); } System.out.println(); } private static void inmidtranver(){ if(nodelist.size()>0){ nodelist.clear(); } midtranver(rootNode); } private static void midtranver(Node rootNode){ if(rootNode == null){ return; } midtranver(rootNode.LeftchildNode); nodelist.add(rootNode); midtranver(rootNode.rightchildNode); } private static Node minnode(Node rootNode) { if(rootNode == null){ System.out.println("树为空 "); } while(rootNode.LeftchildNode !=null){ rootNode = rootNode.LeftchildNode; } return rootNode; } private static Node maxnode(Node rootNode) { if(rootNode == null){ System.out.println("树为空 "); } while(rootNode.rightchildNode !=null){ rootNode = rootNode.rightchildNode; } return rootNode; } }
发表评论
-
文件上传 下载 解析 相对路径
2014-12-16 16:29 2104有点坑吧,弄这么一个简单的东西弄了一天多,身边还有大神指导着, ... -
发送邮件
2014-10-15 11:29 667import org.apache.commons.m ... -
Enum用法
2014-08-06 10:27 812以前的时候知道enum,但 ... -
红黑树
2014-07-24 13:51 628红黑树 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的 ... -
Java中的instanceof关键字
2014-07-21 11:14 444Java中的instanceof关键字 [size=larg ... -
Comparable接口
2014-07-21 11:01 500因为在学红黑树的时候用到了Comparable接口,故此学习一 ... -
二叉树的三种遍历
2014-07-10 11:28 612前序遍历(DLR) 前序 ... -
Java中如何写代码实现无标题无边框的窗体能够用鼠标拖动改变窗口大小
2014-01-23 17:16 1561import java.awt.*; import java ... -
Swing基础
2014-01-10 10:22 421JFrame: frame = new JFrame(); ... -
游戏音效素材大全下载 - 3000首高清无损-按分类整理
2014-01-09 18:03 487因为我看到国外很多素材,但是国内不多,我希望来做好这个事情。 ... -
Swing 键盘练习
2014-01-09 17:59 593在swing界面中写一个键盘,使用前记得放置背景图片 imp ... -
JAVA的Socket的聊天器
2014-01-09 11:06 472这是刚开始学习java网络编程的时候做的一个东东,,局域网聊天 ... -
驱动打印
2013-12-27 15:16 655java驱动打印代码: PrintTest.print(pr ... -
java程序打包
2013-12-27 15:17 522打包一般分为两种,一种是B/S架构打包,一种是C/S打包,大同 ... -
读取文件夹下的所有文件
2013-12-20 13:19 474文章来源:http://www.blogjava.net/ba ... -
实现天气预报功能
2013-12-02 10:30 563import java.io.BufferedReader; ... -
JMF播放AVI格式的视频
2013-12-02 10:26 742public class Conver { publ ... -
JMF视频播放器
2013-12-02 10:24 1139import java.awt.BorderLayout; ...
相关推荐
二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉查找树中,对于任意节点,其左子树中的...
二叉查找树(Binary Search Tree, BST)是一种基础但非常重要的数据结构,它在计算机科学中扮演着核心角色,尤其是在算法和数据结构的学习中。二叉查找树的主要特性是每个节点的左子树只包含小于该节点的元素,右子...
二叉查找树(Binary Search Tree, BST)是一种特殊的数据结构,它在计算机科学中用于高效地存储和检索数据。在二叉查找树中,每个节点包含一个键(key)、一个关联的值、一个指向左子节点的引用以及一个指向右子节点...
在C++编程中,二叉查找树(Binary Search Tree,简称BST)是一种常见的数据结构,它具有以下特性:对于任意节点,其左子树中的所有节点的值都小于该节点的值,右子树中所有节点的值都大于该节点的值。这种性质使得...
二叉查找树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的指针和一个指向右子树的指针。在二叉查找树中,每个节点的键都大于其左子树中的...
二叉查找树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉查找树中,对于任意节点,其左子树中的所有...
用C++实现的最优二叉查找树,简单,明了,是数据结构里经典必学算法,初学者适用
最优二叉查找树(Optimal Binary Search Tree, OBST)是一种高效的检索数据结构,它根据键值分布的不同,自适应地调整树的形态以达到最小化查找时间的目的。在计算机科学中,动态规划(Dynamic Programming, DP)是...
### 一种高效二叉查找树——红黑树 #### 一、引言 在计算机科学领域,二叉查找树(Binary Search Tree, BST)是一种非常重要的数据结构,它能够有效地实现查找、插入和删除等基本操作。然而,在某些情况下,普通的...
标题:最优二叉查找树 描述:算法对最优二叉树的实现(课本上对最优二叉树的基本实现) 在计算机科学中,最优二叉查找树(Optimal Binary Search Tree,简称OBST)是一种特殊的二叉查找树,其设计目标是在平均情况...
二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,它具有以下特性:对于树中的每个节点,其左子树上的所有节点的值都小于该节点的值,而右子树上的所有节点的值都大于该节点的值。这样的特性使得...
1、 定义二叉查找树的类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)实现二叉查找树结构; 2) 实现二叉查找树的查找、插入和删除等算法;
### C++ 实现二叉查找树 #### 一、引言 本文将详细介绍如何使用C++来实现一个二叉查找树(Binary Search Tree, BST),包括其基本操作:插入、删除、遍历等,并通过示例代码进行解释。二叉查找树是一种非常重要的数据...
### 一、二叉查找树简介 二叉查找树是一种特殊的二叉树数据结构,它具有以下特性: 1. **左子树**中的所有节点值均小于其根节点的值。 2. **右子树**中的所有节点值均大于其根节点的值。 3. 左右子树也分别满足上述...
二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树结构,它的每个节点都包含一个键值(key)、一个指向左子树的指针和一个指向右子树的指针。在二叉查找树中,对于任意节点,其左子树中的所有节点的键值都...
二叉查找树(Binary Search Tree,BST),也称为二叉排序树,是一种特殊的二叉树数据结构。它的每个节点都包含一个键(key)、一个关联的值、一个指向左子节点的指针和一个指向右子节点的指针。在二叉查找树中,对于...
二叉查找树(Binary Search Tree,BST),也称为二叉排序树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键值、一个指向左子树的指针和一个指向右子树的指针。在二叉查找树中,对于任意节点,其左子树中的...
二叉查找树的常用操作,含C++代码,找工作的时候可以放在手机里看。