二叉查找树

二叉查找树的定义

帅比萌擦擦* 提交于 2019-11-26 22:37:19
二叉查找树 (Binary Search Tree, BST) 是一种特殊的二叉树,又称为排序二叉树、二叉搜索树、二叉排序树。二叉查找树的递归定义如下: (1)要么二叉查找树是一棵空树。 (2)要么二叉查找树由根结点、左子树、右子树组成,其中左子树和右子树都是二叉查找树,且左子树上所有结点的数据域均 小于或等于 根结点的数据域,右子树上所有结点的数据域均大于根结点的数据域。 从二叉查找树的定义中可以知道,二叉查找树实际上是一棵数据域有序的二叉树,即对树上的每个结点,都满足其左子树上所有结点的数据域均小于或等于根结点的数据域,右子树上所有结点的数据城均大于根结点的数据域。图9-18给出了几棵二叉查找树的示例。 以图9-18的第三棵二叉查找树为例,根结点的数据域为5,其左子树结点的数据域均小于等于5,其右子树结点的数据域均大于5。而在以3为根的子树与以7为根的子树上,也满足上述条件 (即2≤3<4, 6≤7<8)。 来源: https://blog.csdn.net/qq_42815188/article/details/99171831

二叉查找树

為{幸葍}努か 提交于 2019-11-26 19:31:47
二叉查找树(二叉搜索树):                                    ——摘自《挑战》 输入若干条命令,执行以下操作: insert x——将x插入到二叉排序查找树中 delete x——从二叉排序查找树中删除x find x——从二叉排序查找树中查找x,找到则输出yes,否则输出no min——输出该二叉排序查找树的最小值 traverse——输出中序遍历该二叉树的结果 pre——输出先序遍历该二叉树的结果 post——输出后序遍历该二叉树的结果 level——输出层序遍历该二叉树的结果 Code: 1 #include<bits/stdc++.h> 2 using namespace std; 3 struct Node //二叉搜索树的结点 4 { 5 int key; 6 Node *left,*right,*parent; 7 }; 8 Node *root,*NIL; 9 void insert(int k)//插入操作 10 { 11 Node *y=NIL; //x的父结点 12 Node *x=root; 13 Node *z; 14 15 z=(Node *)malloc(sizeof(Node)); 16 z->key=k; 17 z->left=NIL; 18 z->right=NIL; 19 20 while(x!=NIL){

二叉查找树

喜欢而已 提交于 2019-11-26 18:33:42
一、定义   二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉查找树或者是空树,或者是满足如下性质的二叉树: ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值; ②若它的右子树非空,则右子树上所有结点的值均大于根结点的值; ③左、右子树本身又各是一棵二叉查找树。   上述性质简称二叉查找树性质(BST性质),故二叉查找树实际上是满足BST性质的二叉树。 二、特点   由BST性质可得:   (1) 二叉查找树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。   (2) 二叉查找树中,各结点关键字是惟一的。注意:实际应用中,不能保证被查找的数据集中各元素的关键字互不相同,所以可将二叉查找树定义中BST性质(1)里的"小于"改为"大于等于",或将BST性质(2)里的"大于"改为"小于等于",甚至可同时修改这两个性质。   (3) 按中序遍历该树所得到的中序序列是一个递增有序序列。如下图所示的两棵树均是二叉查找树,它们的中序序列均为有序序列:2,3,4,5,7,8。          三、插入运算   在二叉查找树中插入新结点,要保证插入后仍满足BST性质。其插入过程是: (a)若二叉查找树T为空,则为待插入的关键字key申请一个新结点,并令其为根; (b)若二叉查找树T不为空,则将key和根的关键字比较:   (i

树-二叉查找树

前提是你 提交于 2019-11-26 14:58:23
二叉查找树,二叉搜索树,Binary Search Tree 二叉查找树性质:左孩子<双亲<右孩子 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节点的左、右子树也分别为二叉查找树。 没有键值相等的节点 (no duplicate nodes)。 二叉查找树插入与删除 插入 1.若当前的二叉查找树为空,则插入的元素为根节点; 2.若插入的元素值小于根节点值,则将元素插入到左子树中; 3.若插入的元素值不小于根节点值,则将元素插入到右子树中。 删除 分三种情况进行处理: 1.p为叶子节点。 直接删除该节点,再修改其父节点的指针(注意分是根节点和不是根节点)。 2.p为单支节点(即只有左子树或右子树)。 让p的子树与p的父亲节点相连,删除p即可(注意分是根节点和不是根节点)。 3.p的左子树和右子树均不空。 (找后继,次大值):找到p的后继y,因为y一定没有左子树,所以可以删除y,并让y的父亲节点成为y的右子树的父亲节点,并用y的值代替p的值; 二叉查找树实现 //BSTree.h #ifndef BSTREE_HXX #define BSTREE_HXX #include <iostream> using namespace std; template <class T> class

二叉查找树(查找、插入、删除)&mdash;&mdash;C语言

帅比萌擦擦* 提交于 2019-11-26 14:28:51
二叉查找树 二叉查找树(BST:Binary Search Tree)是一种特殊的二叉树,它改善了二叉树节点查找的效率。二叉查找树有以下性质: (1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值 (2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值 (3)左、右子树也分别为二叉排序树 (4)没有键值相等的节点 二叉查找树节点的定义: 1 typedef struct BSTreeNode 2 { 3 int data; 4 struct BSTreeNode *left;//左子树 5 struct BSTreeNode *right;//右子树 6 }BSTree; 跟普通二叉树的节点定义相同 因为查找节点和插入节点都是在 已经构建好二叉查找树 的前提下才能进行的,在删除节点的时候才涉及到调整二叉树的操作,所以这里先以前序遍历的顺序直接输入一个二叉查找树,代码如下 View Code 1、查找节点(递归实现) 若根结点的关键字等于查找的关键字,查找成功,若小于根结点的关键字的值,递归查找左子树,若大于根结点的关键字的值,递归查找右子树,若子树为空,则查找失败,查找的操作较为简单,实现代码如下 1 /* 查找特定值 */ 2 void SearchData(int targ, BSTree *nod) 3 { 4 if (nod != NULL) 5 { 6