二叉搜索树
来源:互联网 发布:Date java 编辑:程序博客网 时间:2024/06/05 23:44
1.什么是二叉搜索树
顾名思义,一颗二叉搜索树是以一颗二叉树来组织的,如图(a)所示。这样一棵树可以使用一个链表数据结构来表示,其中么一个节点就是一个对象。除了key和卫星数据以外,每个结点还包含属性left、right和p,他们分别指向节点的左孩子、右孩子和双亲。如果某个孩子节点和父节点不存在,则相应的属性的值为NIL。根节点是树中唯一父指针为NIL的结点。
二叉搜索树中的关键字总是以满足二叉搜索树性质的方式来存储:
设x是二叉搜索树中的一个结点。如果y是x左子树中的一个结点,那么y.key ≤ x.key。 如果y是x右子树中的一个结点,那么y.key ≥ x.key。
因此,在图(a)中,树根的关键字为6,在其左子树中有关键字2、5和5,它们均不大于6;而在其右子树中有关键字7和8,它们均不小于6.这个性质对树中的每个结点都成立。例如,树根的左孩子为关键字5,不小于其左子树中的关键字2并且不大于其右子树中的关键字5.
二叉搜索树性质允许我们通过一个简单的递归算法来按序输出二叉搜索树中的关键字,下面用,先生称一颗二叉搜索树,然后用中序遍历(inorder tree walk)算法输出图(a)的二叉搜索树。
#include <iostream>using namespace std;typedef struct BSTree{char node_value;struct BSTree *left;struct BSTree *right;} Tree;/*****构造二叉查找树**********************************************/void CreateBSTree(Tree *root, char node_value);Tree *CreateBSTree(char *array_list, int array_length);void Print(Tree *root);int main(){Tree *root = NULL;char list[] = {'6', '5', '7', '2', '5', ' ', '8'};root = CreateBSTree(list, 7);cout << "Cearte BSTree." << endl;Print(root);return 0;}Tree *CreateBSTree(char *array_list, int array_length){if(array_length <= 0){return false;}Tree *root = NULL;root = new BSTree();root->left = NULL;root->right = NULL;root->node_value = array_list[0];for(int i = 1; i < array_length; i++){CreateBSTree(root, array_list[i]);}return root;}void CreateBSTree(Tree *root, char node_value){if (node_value !=' '){if(root == NULL){return ;}if(root->node_value > node_value){if(root->left == NULL){Tree *node = new Tree();node->left = NULL;node->right = NULL;node->node_value = node_value;root->left = node;}else{CreateBSTree(root->left, node_value);}}else{if(root->right == NULL){Tree *node = new Tree();node->left = NULL;node->right = NULL;node->node_value = node_value;root->right = node;}else{CreateBSTree(root->right, node_value);}}}else{Tree *node =NULL;}}void Print(Tree *root){if(root == NULL){return ;}Print(root->left);cout << char(root->node_value) <<endl;Print(root->right);}结果见下图:
0 0
- 【二叉搜索数】HDU3791二叉搜索树
- 二叉树--二叉搜索树
- 【二叉树】二叉搜索树
- 二叉树- 二叉搜索树
- 【搜索树】二叉搜索树
- 二叉搜索树BSTree
- 二叉搜索树
- 二叉搜索树
- 二叉搜索树
- 最优二叉搜索树
- 二叉搜索树
- 二叉搜索树
- HDOJ3791 二叉搜索树
- 二叉查找树搜索
- 二叉搜索树
- 二叉搜索树
- BST 二叉搜索树
- 二叉搜索树
- 内存字节对齐原则
- extern "C"的用法解析
- 多线程笔记
- git - 生成 ssh key for Mac
- Andriod Studio导入代码后中文乱码解决方案
- 二叉搜索树
- OC学习之道:OC中类别--Category类目的使用/Eetension类的扩展 的使用
- Python中如何遍历字典
- 程序的内存分配
- 条款04:确定对象被使用前已被初始化
- c++排序(快速排序)
- [leetcode]51 Two Sum
- COGS-313-和平委员会-POI2001-2-SAT
- 使用JPA进行数据操作