- 浏览: 122986 次
- 性别:
- 来自: 上海
最新评论
每个节点最多两个子节点,其中左边节点的值小于该节点的值,右边节点的值大于该节点的值。为了简便起见,该二叉树装入的数据为整数,且不允许有重复的关键字值。
编程中为了简便,采用了递归算法,运算时会带来额外的开销,如果能将相应的算法替换为迭代,则更为有效。删除的算法相应复杂一些,但也可以承受。
API
add:将数加入树
remove:从树中删除指定的节点
contains:树中是否包含指定的数
ordinal:从小到大遍历打印数(测试只用)
max:查找最大值
min:查找最小值
其中Node类是辅助类,为了简单没有写标准的 get,set方法。
因为该树没有自我保持平衡的能力,因此对于随机插入的数据,效果较好,对于有局部生降序特征的插入序列,则会失去平衡,极端状况下,树退化成链表。关于平衡树请参见(Tree2-3-4
,红黑树
,Tree-2-3
)
Tree的main函数仅为测试之用。
class Node { private int value; private Node left; private Node right; Node(int value) { this.value = value; } int value() { return value; } void left(Node left) { this.left = left; } void right(Node right) { this.right = right; } Node left() { return left; } Node right() { return right; } } class Tree { private Node root; void add(int value) { Node node = new Node(value); if(root == null) root = node; else add(root,node); } private void add(Node current, Node node) { if(node.value() < current.value()) { if(current.left() == null) current.left(node); else add(current.left(), node); } else if(node.value() > current.value()) { if(current.right() == null) current.right(node); else add(current.right(), node); } } boolean contains(int value) { if(root == null) return false; else return contains(root,value); } private boolean contains(Node current, int value) { if(current == null) return false; if(current.value() == value) return true; if(value < current.value()) return contains(current.left(),value); else return contains(current.right(),value); } void remove(int value) { remove(null,root,value); } private void remove(Node parent, Node current, int value) { if(current == null) return; if(current.value() == value) { Node node; if(current.left() == null && current.right() == null) node = null; else if (current.left() != null && current.right() == null) node = current.left(); else if (current.right() != null && current.left() == null) node = current.right(); else { node = removeMin(current,current.right()); node.left(current.left()); node.right(current.right()); } if(parent == null) root = node; else if(parent.left() == current) parent.left(node); else parent.right(node); } else if(value < current.value()) remove(current,current.left(),value); else remove(current,current.right(),value); } private Node removeMin(Node parent, Node current) { if(current.left() != null) return removeMin(current,current.left()); else { if(parent.left() == current) parent.left(current.right()); else parent.right(current.right()); return current; } } int max() { if(root == null) return -1; else return max(root); } private int max(Node current) { if(current.right() == null) return current.value(); else return max(current.right()); } int min() { if(root == null) return -1; else return min(root); } private int min(Node current) { if(current.left() == null) return current.value(); else return min(current.left()); } void ordinal() { if (root == null) return; else ordinal(root); } void ordinal(Node current) { if(current.left() != null) ordinal(current.left()); System.out.println(current.value() + " "); if(current.right() != null) ordinal(current.right()); } public static void main(String[] args) { Tree t = new Tree(); t.add(50); t.add(6); t.add(29); t.add(100); t.add(34); t.add(45); t.add(4); t.add(68); t.ordinal(); System.out.println(t.contains(34)); assert t.contains(34); assert t.contains(6); assert !t.contains(110); assert t.max() == 100; assert t.min() == 4; t.remove(50); t.remove(45); t.remove(6); t.ordinal(); } }
发表评论
-
Tree 红黑树
2008-05-01 17:23 2703红黑树是一种二叉平衡 ... -
Tree 2-3 平衡搜索树
2008-04-25 00:21 2335与2-3-4树 相似,2-3 平衡树是 ... -
Tree 2-3-4 平衡搜索树
2008-04-20 10:53 34992-3-4 平衡树是一种搜索树。每个节点可能会有2,3,4个子 ... -
Graph 图-邻接表法
2008-04-17 00:08 3008用邻接表法表示的双向图(改单向容易,只要修改connect,d ... -
Graph 图-邻接矩阵法
2008-04-16 22:56 3546用邻接矩阵法表示的双向图(改单向容易,只要修改connect, ... -
Heap 堆
2008-04-16 00:28 1480这里的堆不是java中内存分配的堆。只是一种数据结构。 堆是二 ... -
HashTable 基于链表地址法
2008-04-15 00:49 1649功能上于前面两个HashTable(-) ,HashTable ... -
HashTable 基于开放地址法(二)
2008-04-14 19:40 2024与前一个HashTable 基本相同(方法说明请参照它),只是 ... -
HashTable 基于开放地址法
2008-04-13 22:59 1594该HashTable基于定常数组的开放地址法,搜索时采用线性探 ... -
PriorityQueue 优先级队列
2008-04-06 17:57 3451提供一个基于链表的优先级队列,为了简便,只存储整数,假设数值越 ... -
PriorityQueue 优先级队列
2008-04-06 16:57 4350提供一个基于定长数组的优先级队列,为了简便,只存储整数,假设数 ... -
Queue 队
2008-04-06 13:36 1559指定最大值的队,底层用数组实现构造函数:指定最大容量put:放 ... -
ArrayStack 栈
2008-04-06 12:00 1307用Array实现的栈结构,功能与LinkedStack一致编程 ... -
Array 可变长可变维数组
2008-04-06 11:25 1843一个可以变长,变维的数组(只可以变大),用来替代多维数组基本做 ... -
StackDLink 双向链表
2008-04-05 23:20 1155用LinkedStack实现的双向链表,功能与DLink一致就 ... -
LinkedList 列表
2008-04-05 19:16 1465列表的简单实现,只能存储非负整数List 也属于ADT(抽象数 ... -
ArrayList 列表
2008-04-05 19:01 1208列表的简单实现,只能存储非负整数List 也属于ADT(抽象数 ... -
LinkedQueue 队
2008-04-05 18:43 1857实现了队的最简单功能:先进现出队属于ADT(抽象数据类型),其 ... -
DLink 双向双端链表
2008-04-05 18:06 1505DLink 实现一个简单的双向双端链表与Link一样,假定其之 ... -
LinkedStack 栈
2008-04-05 17:45 1127LinkedStack栈属于ADT(抽象数据类型),其提供同样 ...
相关推荐
binary search tree 二叉搜索树的C++实现,有插入、删除、查找、查找最大最小等功能,并附有测试例子,简单易懂
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树结构,它的每个节点都具有以下特性:左子树上所有节点的值均小于当前节点的值,右子树上所有节点的值均大于当前节点的值。这种特性使得二叉搜索树在查找、...
在计算机科学中,数据结构是存储和组织数据的关键方式,而二叉搜索树(Binary Search Tree,BST)作为一种特殊的数据结构,因其高效的操作性能在各种实际应用中得到广泛使用。本程序正是利用了二叉搜索树的特性,...
二叉搜索树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的指针和一个指向右子树的指针。在二叉搜索树中,对于任何一个节点,其左子树中的...
二叉搜索树(Binary Search Tree,BST),是数据结构领域中的一个重要概念,它是一种特殊的二叉树,每个节点的左子树只包含比其小的元素,而右子树则包含大于它的元素。这种特性使得二叉搜索树在查找、插入和删除...
二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST)的实现与操作.docx 二叉搜索树(Binary Search Tree,BST...
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树结构,它的每个节点都包含一个键值(key)、一个关联的数据值、一个指向左子树的指针和一个指向右子树的指针。在二叉搜索树中,对于任意节点而言,其左子树...
从给定的文件信息来看,该段代码主要涉及到了数据结构中的两个重要概念:霍夫曼树(Huffman Tree)和二叉搜索树(Binary Search Tree),并使用C++语言进行实现。以下是对这两个知识点的详细解析: ### 霍夫曼树...
二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树数据结构,它具有以下特性: 1. **每个节点都包含一个键(key)、一个关联的值、一个指向左子节点的引用和一个指向右子节点的引用**。 2. **键的值大于左...
二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树结构,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的指针和一个指向右子树的指针。在二叉搜索树中,对于任何节点,其左子树中的所有...
增强二叉搜索树,也称为动态二叉搜索树或自平衡二叉搜索树,是一种在普通二叉搜索树基础上增加了额外特性的数据结构。在普通的二叉搜索树中,每个节点包含一个键值(key)以及指向左子树和右子树的指针,同时还保证...
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树结构,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉搜索树中,对于任意节点,其左子树中的所有...
**最优二叉搜索树**(Optimal Binary Search Tree,简称OBST)是一种特殊的二叉搜索树,其节点按照特定的方式排列,使得在进行搜索操作时所需的平均成本最小。在实际应用中,构建一个最优的二叉搜索树能够有效提高数据...
二叉搜索树(Binary Search Tree,BST)是数据结构中的一种特殊类型,它是一种二叉树,具有以下特性: 1. 每个节点都包含一个键(key)、一个关联的值、一个指向左子节点的引用和一个指向右子节点的引用。 2. 节点...
二叉搜索树(Binary Search Tree, BST)是一种特殊类型的二叉树,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的指针和一个指向右子树的指针。在二叉搜索树中,对于任何一个节点,其左子树中的...
二叉搜索树(Binary Search Tree,BST)是一种特殊类型的二叉树,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉搜索树中,对于任意节点,其左子树中的所有...
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子树的引用和一个指向右子树的引用。在二叉搜索树中,对于任意节点,其左子树中的...
在IT领域,二叉搜索树(Binary Search Tree, BST)是一种常见的数据结构,它具有左子树上所有节点的值小于根节点的值,右子树上所有节点的值大于根节点的值的特性。这样的特性使得二叉搜索树非常适合进行查找、插入...
二叉搜索树(BST,Binary Search Tree)是一种特殊的二叉树结构,它的每个节点都包含一个键值(key)、一个关联的数据或值、一个指向左子树的引用和一个指向右子树的引用。在二叉搜索树中,对于任何非空节点,其左...
二叉搜索树(Binary Search Tree, BST)是计算机科学中一种重要的数据结构,它在处理大量数据时提供了高效的操作,如查找、插入和删除。在本主题中,我们将深入探讨如何使用VC/C++编程语言实现二叉搜索树的查找算法...