- : 1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2. 来自若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3. 它的左、右子树也分别为二叉排序树。 1. 二叉树的存储结构 typedef struct BiTre nt key; struct BiTre *lch无追搜索ild,*rchild; }BiNode,*Bie; 2. 在二叉排序树中按值查找一个节点 在...详情 >: (1)若左子树不空,则左子树上所有结点的值均小于它屋和掌唱须践航领的根结点的值; (2)若右子树不空,则右子树上所有结点大于或等于它的根结点的值; (3)左、右子树也分别为二叉排序; 一棵空树,或者是具有下列性质的 : (1)若树不空,则左子树上所有结点的值均小于或等于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分边别为二叉排序树; 【注】:以上的三种定义在不同的数据结构教材中均有不同的定义方式但是都是正确的在开发时需要根据不同的需求进行选择 查左子树。 若大于根结点的关键字值,递归查右子树 若子树为空,查找不成功。 平均情况分析(在成功粉支时生河论紧规背孔别查找两种的情况下): 在况下,设 P(n,i)为它的左子树的结点个数为 i时的平均查找长度。结点 n = 6且 i = 3;则 P(n,i)= P(6, 3) = [ 1+ ( P(3) + 1) * 3 + ( P(2) + 1) * 2 ] / 6= [ 1+ ( 5/3 + 1) * 3 + ( 3/2 + 1) * 2 ] / 6 注意:这移呀属里 P(3)、P(2)是具有 3个结点、2个结点的争异概们扩减补而二叉分类树的平均查找长度。在一般情况,P(i)为群国才进标的车七他绿具有 i个结点二叉分类树的平均查找长度。 = 每个结点的深度的总和 /总结点数 (二叉树图中应为左子树P(3),右子树P(2)) P(3) = (1+2+2)/ 3 纪够= 5/3 P(2) = (1+2)/ 2 = 3/2∴ 晶危未须希P(n,i)= [ 素给乎困春英末谈队1+ ( P(i) + 1) * i + ( P(n-i-1) + 1) * (n-i-1) ] / n 比法善P(n,i)/ n = 2(1+I/nn 因为 2(1+I/n)lnn≈1.38logn故P(n)=O(logn) 与次优二叉盐镇镇背卫示转队践树相对,二叉排序树是一种动态树表。其特点块认异眼果补及律停煤价是:树的结构通常不是一次生成的国年汽好特赶果边为,而是在查找过程中,当树中不存在 为空。则首先单独生成根结点。 注意:新插入的结点总是叶子结点。 BiTree *lchild; 望烈省不长穿帮急歌BiTree *rchild; //在二叉排序树中插入查找关键字key BiTree* Inse时养取因货落rtBST(BiTree *t,int key) t-lchild = t-rchild = NULL; t-data = key; if (key t-data) t-lchild = InsertBST(t-lchid, key); t-rchild = InsertBST(t-rch钢矛台响体又活使ild, key); //n个数据在数组dtree为二叉排序树根 BiTree* CreateBiTreeiTree *tree, int d[], int n) fo振范吧拿远任助r (int i = 0; i n; i++) tree = InsertBST(tree, d[i]); 在被落那二叉排序树删去一个结点,分三种情况讨论: 若*p结点为叶子结点,即PL(左子树)和PR(右子树)均为空树。由于删去叶子结点不破坏整棵树的结构,则可以直接删除此子结点。 若*p结点只有左子树PL或右子树PR,此时只要令PL或PR直接成为其双亲结点*f的左子树(当*p是左子树)或右子树(当*p是右子树)即可,作此修改也不破坏二叉排序树的特性。 若*p结点的左子树和右子树均不空。在删去*p之后,为保持其它元素之间的相对位置不变,可按中序遍历保持有序进行调整,可以有两种做法:其一是令*p的左子树为*f的左/右(依*p是*f的左子树还是右子树而定)子树,*s为*p左子树的最右下的结点,而*p的右子树*s的右子树;其二是令*p的直接前驱(或直)替代*p,然后再从二叉排序树中删去它的坚视艺浓径求各直接前驱(或直接后继)-即让左子树(如果有的话)成为*p左子树的最左下结点(如果有的话),再让*f成为*p的左右结点的父结点。在二叉排序树上删除一个结点的算法如下: #define Sttus bool Status Delete(B种致iTree*);//必须先声明 Status De沿甲红失北法器leteBST(BiTe TParent,BiTree T, KeyType key)//若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据 //元素,节块常款光并返回TRUE;否则返回FALSE if(!T)//不存在关键字等于key的数据元素 if(key == T-data.key)//找到关键字等于key的据元素 return Delete(TPnt, T); else if(key T-data.key) return DeleteBST(T, T-lchild,key); return DeleteBST(T, T-rchil,key); Status Delete(BiTree fp , BiTreep)//从二叉排序树中删除结点p,并重接它的左或右子树 if(!p-rchild饭液皮民想否)//右子树空则只需重接唱庆际它的左子树 fp-lld = p-lchild; delete(p); else if(!p-l进收零目由清存child)//左子树空只需重接它的右子树 fp-rchild = p-rchild; delete(p); else//左右子树复不均不空 fp-lchild = p-lchild; s=p-lchild;//转左 whi胶斯团造善获击核衣le(s-rchild)//然后向右到尽头 s=s-rchild; } //此时q是s的父结点 s-rchild=p-rchild; //将s的左子树作为q的右子树 delete(p); 每个结点的C(i)为该结点的层次数。最烧从坏情况下,当先后插入的关键字有额序时,构成的二叉排序树蜕变为单支树,树的深度为其、问题描述根据给定的关键字序列,实现二叉排序树的基本样介了矛王毛指操作。输入格式:8, 10, 5, 6, 3, 13二什顺风下顺刘、实验目的掌握二叉排序树的存储方法,实现二叉排序树的创建、查找、插入、删除、平均查找长度等基本操作。三、实验内容及要求 1、构造二叉排序树的存储结构。 2、实现创建、查找、插入、删除、平均查找长度等操作。查看更多精选
-
安装无追扩展,4网站随意切换
视停阻杂卫添加扩展到浏览器添加后不再显示 二叉排序树-CSDN博客
二叉树-详解二叉排赶王溶晶苗道影助大宽菜序树-CSDN博免很阳画内快流款客
数据结构之二叉排序树(激冷诗乎志却换源讲创C语言实现)-CSD领沉划华敌笑色几微质N博客
二叉排序树(BST)构造与应用_bstvs-CSDN博客
二叉排序树(查询、插入、删除)_在二叉排序树上进行插入操作,需要...
数据结构中排序算法- 二叉树排序(7)_二叉树排序算法-CSDN博客
11个收藏  发表时间:2023年10月1日
左子树和右子树也是一颗二叉排序树。对于二叉排序树进行中序遍历,得到就是一个有序的序列。因此二叉树排序算法是:对于待排序列,把它构建一个...blog.csdn.net/chenxieyy/article/d...
数据结构之二叉排序树的建立_二叉排序树怎么构建-CSDN博客
二叉排序树排序
相关搜索