二叉树的4个普遍性质和2个特殊性质的完善推导过程
二叉树的5个性质
1、在二叉树的第k 层上,最多有2k-1(k ≥1)个结点
证明:在二叉树的第i 层上最多有2 i-1 个节点
1层 1个 20
2层 2个 21
3层 4个 22
.....
i 层 2 i-1个
2、二叉树中如果深度为k,那么最多有2k -1个节点
证明:在具有相同深度的二叉树中,仅当每一层都含有最大结点数时,其树中结点数最多。
因此利用性质1可得,深度为k 的二叉树的结点数至多为:
20+21+…+2k-1=2k -1
故命题正确。
3、在任意一棵二叉树中,若终端结点的个数为n 0,度为2的结点数为n 2,则n o =n 2+1。
. 证明:n 0=n 2+1 n 0表示度数为0的节点 n 2表示度数为2的节点
推导过程 根据两个公式
1). n=n 0+n 1+n 2 n 表示二叉树中的节点总个数,n 1表示度数为1的节点个数
2). n-1=2n 2+n 1 通过观察二叉树我们可知,除了根节点之外,其余的任何节点都有一个入口分支(或其他节点都有一个入口分支),那么节点的总分支数等于节点个数减一,度数为2的节点有2个出口分支,度数为一的有1个出口分支,度数为0的节点没有出口分支 所以总的分支个数为 2n 2+n 1,因此有n=2n 2+n 1+1,
3).比较n=n 0+n 1+n 2和n=2n 2+n 1+1两式,可得n 0=n 2+1。
5.在完全二叉树中,具有n 个节点的完全二叉树的深度为[log2n]+1,其中[log2n]+1是向下取整。
证明:
根据性质 2: 假设深度为k 的满二叉树的节点个数一定为2k -1,那么n=2k -1推得满二叉树的深度数为k=log 2(n+1);——深度为m 的二叉树最多有2k -1个节点,即是满二叉树的情形。
设完全二叉树是具有n 个节点的二叉树,若按层序编号那么其编号与同样深度的满二叉()
11122111n m m n a q S q --===---()
11111220n k k n a a q k ---==⋅=≥
树的节点编号在二叉树的位置相同,那么他就是完全二叉树,也就是说他的叶子结点只可能出现在最下边的两层,他的深度等于满二叉的深度,但他的节点一定少于或等于满二叉树的
节点个数(即n2k-1),但一定多于2k-1-1,该结论的理由为:由完全二叉树定义可得:深度
为k得完全二叉树的前k-1层是深度为k-1的满二叉树,一共有2k-1-1个结点。
由于完全二叉树深度为k,故第k层上还有若干个结点,因此该完全二叉树的结点个数:n>2k-1-1。
那么,综上所述,n就满足2k-1-1<n<=2k-1;
由于n为整数那么n<=2k-1可以推出n<2k ,n>2k-1-1可以推出n>=2k-1,所以2k-1<=n<2k , 对不等式取对数,即可得k-1<=log2n<k ,而k作为整数,因此k=[log2n]+1
4、具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分。
证明:由上面的第五性质的证明和完全二叉树的概念可知,完全二叉树作为特殊形态的二叉树,在结点数相同的情况下,完全二叉树是二叉树中层数最少的一种形态,所以上述命题成立。
6、如果有一颗有n个节点的完全二叉树的节点按层次序编号,对任一层的节点k(1<=k<=n)有
1.如果k=1,则节点是二叉树的根,无父结点,如果k>1,则其父结点为[k/2],向下取整
2.如果2k>n那么结点k没有左孩子,否则其左孩子为2k
3.如果2k+1>n那么结点k没有右孩子,否则右孩子为2k+1
此外,若对二叉树的根结点从0开始编号,则相应的k号结点的双亲结点的编号为(k -1)/2,左孩子的编号为2k+1,右孩子的编号为2k+2。
此性质可采用数学归纳法证明。
证明略。
这个性质是一般二叉树顺序存储的重要基础。
二叉树知识点总结
二叉树知识点总结1. 二叉树的性质1.1 二叉树的性质一:二叉树的深度二叉树的深度是指从根节点到叶子节点的最长路径长度。
对于一个空树而言,它的深度为0;对于只有一个根节点的树而言,它的深度为1。
根据定义可知,深度为k的二叉树中,叶子节点的深度值为k。
由此可知,二叉树的深度为所有叶子节点深度的最大值。
1.2 二叉树的性质二:二叉树的高度二叉树的高度是指从根节点到叶子节点的最短路径长度。
对于一个空树而言,它的高度为0;对于只有一个根节点的树而言,它的高度为1。
由此可知,二叉树的高度总是比深度大一。
1.3 二叉树的性质三:二叉树的节点数量对于一个深度为k的二叉树而言,它最多包含2^k - 1个节点。
而对于一个拥有n个节点的二叉树而言,它的深度最多为log2(n+1)。
1.4 二叉树的性质四:满二叉树满二叉树是一种特殊类型的二叉树,它的每个节点要么是叶子节点,要么拥有两个子节点。
满二叉树的性质是:对于深度为k的满二叉树而言,它的节点数量一定是2^k - 1。
1.5 二叉树的性质五:完全二叉树完全二叉树是一种特殊类型的二叉树,它的所有叶子节点都集中在树的最低两层,并且最后一层的叶子节点从左到右依次排列。
对于一个深度为k的完全二叉树而言,它的节点数量一定在2^(k-1)和2^k之间。
2. 二叉树的遍历二叉树的遍历是指按照一定的顺序访问二叉树的所有节点。
二叉树的遍历主要包括前序遍历、中序遍历和后序遍历三种。
2.1 前序遍历(Pre-order traversal)前序遍历的顺序是:根节点 -> 左子树 -> 右子树。
对于一个二叉树而言,前序遍历的结果就是按照“根-左-右”的顺序访问所有节点。
2.2 中序遍历(In-order traversal)中序遍历的顺序是:左子树 -> 根节点 -> 右子树。
对于一个二叉树而言,中序遍历的结果就是按照“左-根-右”的顺序访问所有节点。
2.3 后序遍历(Post-order traversal)后序遍历的顺序是:左子树 -> 右子树 -> 根节点。
基本二叉树知识讲解
基本二叉树知识讲解一、有关二叉树的学习性质1:二叉树上叶子结点数等于度为2的结点数加1。
性质2:二叉树的第i层上至多有2的i次方减1个结点(i>=1)。
性质3:深度为h的二叉树至多有2的h次方减1个结点。
满二叉树:在一棵二叉树中,当第i层的结点树为2的i次方减1个时,称此层的结点数是满的。
当一棵二叉树中的每一层都满时,称此树为满二叉树。
特性:除叶子结点以外的其他的结点的度皆为2,且叶子结点在同一层上。
深度为h的满二叉树中的结点数为2的h次方减1。
性质4:设含有n个结点的完全二叉树的深度为k,则k=(int)(log2n)+1,即深度k等于log2n的整数部分再加1。
二叉树的存储结构1:顺序存储结构二叉树的顺序存储结构类型定义如下:#define TREEMINSIZE 10typedef struct{BTreeDT(数据类型) *base;int spacesize;BTreeDT nullvalue;}SeqTree;2:链式存储结构(一般的二叉树主要采用链式存储结构通常有二叉链表和三叉链表两种形式)1>二叉链表存储结构二叉链表中的每个结点由data,lchild和rchild三个域组成,定义如下:typedef struct bkbtnode{BTreeDT data;struct bkbtnode *lchild;struct bkbtnode *rchild;}BTNode,*BKBTree;在二叉链表中,查找某结点的孩子很容易实现,但查找某结点的双亲不方便。
一棵喊有n个结点的二叉树采用二叉链表存储时,将有2n-(n-1)=n+1个指针域是空的。
2>三叉链表存储结构typedef struct tkbtnode{BTreeDT data;struct tkbtnode *lchild;struct tkbtnode *rchild;struct tkbtnode *parent;}TKBTNode,*TKBTree;其中,parent域存放该结点双亲的指针。
数据结构之二叉树(BinaryTree)
数据结构之⼆叉树(BinaryTree)⽬录导读 ⼆叉树是⼀种很常见的数据结构,但要注意的是,⼆叉树并不是树的特殊情况,⼆叉树与树是两种不⼀样的数据结构。
⽬录 ⼀、⼆叉树的定义 ⼆、⼆叉树为何不是特殊的树 三、⼆叉树的五种基本形态 四、⼆叉树相关术语 五、⼆叉树的主要性质(6个) 六、⼆叉树的存储结构(2种) 七、⼆叉树的遍历算法(4种) ⼋、⼆叉树的基本应⽤:⼆叉排序树、平衡⼆叉树、赫夫曼树及赫夫曼编码⼀、⼆叉树的定义 如果你知道树的定义(有限个结点组成的具有层次关系的集合),那么就很好理解⼆叉树了。
定义:⼆叉树是n(n≥0)个结点的有限集,⼆叉树是每个结点最多有两个⼦树的树结构,它由⼀个根结点及左⼦树和右⼦树组成。
(这⾥的左⼦树和右⼦树也是⼆叉树)。
值得注意的是,⼆叉树和“度⾄多为2的有序树”⼏乎⼀样,但,⼆叉树不是树的特殊情形。
具体分析如下⼆、⼆叉树为何不是特殊的树 1、⼆叉树与⽆序树不同 ⼆叉树的⼦树有左右之分,不能颠倒。
⽆序树的⼦树⽆左右之分。
2、⼆叉树与有序树也不同(关键) 当有序树有两个⼦树时,确实可以看做⼀颗⼆叉树,但当只有⼀个⼦树时,就没有了左右之分,如图所⽰:三、⼆叉树的五种基本状态四、⼆叉树相关术语是满⼆叉树;⽽国际定义为,不存在度为1的结点,即结点的度要么为2要么为0,这样的⼆叉树就称为满⼆叉树。
这两种概念完全不同,既然在国内,我们就默认第⼀种定义就好)。
完全⼆叉树:如果将⼀颗深度为K的⼆叉树按从上到下、从左到右的顺序进⾏编号,如果各结点的编号与深度为K的满⼆叉树相同位置的编号完全对应,那么这就是⼀颗完全⼆叉树。
如图所⽰:五、⼆叉树的主要性质 ⼆叉树的性质是基于它的结构⽽得来的,这些性质不必死记,使⽤到再查询或者⾃⼰根据⼆叉树结构进⾏推理即可。
性质1:⾮空⼆叉树的叶⼦结点数等于双分⽀结点数加1。
证明:设⼆叉树的叶⼦结点数为X,单分⽀结点数为Y,双分⽀结点数为Z。
二叉树
我们也可以把递归过程改成用栈实现的非递归过程,下面给出先序 遍历的非递归过程: procedure inorder(bt:tree); var stack:array[1..n] of tree; {栈} top:integer; {栈顶指针} p:tree; begin top:=0; while not ((bt=nil)and(top=0)) do begin
• ⑴如果i=1,则结点i为根,无父结点;如果i>1,则其 父结点编号为trunc(i/2)。 • ⑵如果2*i>n,则结点i为叶结点;否则左孩子编号为 2*i。 • ⑶如果2*i+1>n,则结点i无右孩子;否则右孩子编号 为2*i+1。
存储结构
• 二叉树的存储结构和普通树的存储结构基本相同,有链 式和顺序存储两种方法。 • ⑴链式存储结构:有单链表结构或双链表结构,基本数 据结构定义如下: type tree=^node;{单链表结构} node=record data:char;{数据域} lchild,rchild:tree;{指针域:分别指向左、右孩子} end; var bt:tree;
• 输入: • 其中第一行一个整数n,表示树的结点数。接下来的n行 每行描述了一个结点的状况,包含了三个整数,整数之 间用空格分隔,其中:第一个数为居民人口数;第二个 数为左链接,为0表示无链接;第三个数为右链接。 • 输出: • 只有一个整数,表示最小距离和。
• • • • • • • •
样例 输入: 5 13 2 3 4 0 0 12 4 5 20 0 0 40 0 0
2、删除二叉树 procedure dis(var bt:tree); begin if bt<>nil then begin dis(bt^.lchild); dis(bt^.rchild); dispose(bt); end; end;
《二叉树的概念》课件
05
二叉树的应用
Chapter
在数据结构中的应用
二叉搜索树
二叉搜索树是一种特殊的二叉树,它的每个节点的左子树上的所有元素都小于 该节点,右子树上的所有元素都大于该节点。这种数据结构可以用于快速查找 、插入和删除操作。
AVL树和红黑树
这两种二叉树都是自平衡二叉搜索树,它们通过调整节点的左右子树的高度来 保持树的平衡,从而在插入、删除等操作时具有较好的性能。
VS
详细描述
平衡二叉树的特点是,它的左右子树的高 度差不会超过1,且左右子树都是平衡二 叉树。平衡二叉树的性质还包括,它的所 有叶节点的层数相等,且所有非叶节点的 左右子树的高度差不超过1。平衡二叉树 的查找、插入和删除操作的时间复杂度为 O(log n),其中n为节点数。
04
二叉树的遍历
Chapter
决策树
在机器学习和人工智能领域,决策树 是一种重要的分类和回归方法。其基 础结构就是二叉树,通过构建决策树 ,可以解决分类和回归问题。
THANKS
感谢观看
代码表示法
总结词:严谨规范
详细描述:使用编程语言的语法结构来表示二叉树,每个节点用对象或结构体表示,节点间的关系通 过指针或引用表示,严谨规范,易于编写和调试。
03
二叉树的性质
Chapter
深度最大的二叉树
总结词
深度最大的二叉树是指具有最大 可能深度的二叉树。
详细描述
在二叉树中,深度最大的二叉树 是满二叉树,即每个层级都完全 填满,没有空缺的节点。满二叉 树的深度等于其节点总数减一。
02
二叉树的表示方法
Chapter
图形表示法
总结词:直观明了
详细描述:通过图形的方式展示二叉树的结构,每个节点用圆圈或方框表示,节 点间的关系用线段表示,直观易懂,易于理解。
计算机二级公共基础专题探究——二叉树
公共基础专题探究——二叉树1.6 树与二叉树树是一种简单的非线性结构,所有元素之间具有明显的层次特性。
在树结构中,没有前件的结点只有一个,称为树的根结点,简称树的根。
每一个结点可以有多个后件,称为该结点的子结点。
没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。
为该结点的左子树与右子树。
二叉树的基本性质:必考的题目(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点;(2)深度为m的二叉树最多有2m-1个结点;(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;(4)二叉树中 n = n0 +n1 +n2k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。
若干结点。
二叉树的遍历:(一般画个图要你把顺序写出来)后序遍历(访问根结点在访问左子树和访问右子树之后)重点题型:二叉树的遍历例1:某二叉树的前序序列为ABCD,中序序列为DCBA,则后序序列为(DCBA )。
【解析】前序序列为ABCD,可知A为根结点。
根据中序序列为DCBA可知DCB是A的左子树。
根据前序序列可知B是CD的根结点。
再根据中序序列可知DC是结点B的左子树。
根据前序序列可知,C是D的根结点,故后序序列为DCBA例2:对下列二叉树进行前序遍历的结果为 ABDYECFXZ例3:设二叉树如下,则后序序列为 DGEBHFCA【解析】本题中前序遍历为ABDEGCFH,中序遍历为DBGEAFHC,后序遍历为DGEBHFCA完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后堆排序问题:例1:已知前序序列与中序序列均为ABCDEFGH,求后序序列【解析】设根节点为D≠0,左子树为L,右子树为R,有遍历顺序为:前:D-L-R 已知ABCDEFGH中:L-D-R 已知ABCDEFGH后:L-R-D 待求由此可知,L=0,D-R= ABCDEFGH故R-D=HGFEDCBA,即后序序列= HGFEDCBA变式训练1:已知后序序列与中序序列均为ABCDEFGH,求前序序列答案:HGFEDCBA,(这次R=0)结论:若前序序列与中序序列均为某序列,则后序序列为该序列的倒序,且为折线;同样地,若后序序列与中序序列均为某序列,则前序序列为该序列的倒序,且为折线例2:已知前序序列=ABCD,中序序列=DCBA,求后序序列【解析】设根节点为D≠0,左子树为L,右子树为R,有遍历顺序为:前:D-L-R 已知ABCD中:L-D-R 已知DCBA后:L-R-D 待求因为ABCD与DCBA正好相反,由此可知,R=0所以D-L=ABCD,即L-D=DCBA所以后序序列= DCBA变式训练2-1:中序序列=BDCA,后序序列=DCBA,求前序序列【解析】设根节点为D≠0,左子树为L,右子树为R,有遍历顺序为:前:D-L-R 待求中:L-D-R 已知BDC,A后:L-R-D 已知DCB,A通过观察可知,R=0,L={B,D,C},D=A中、后变换时,{B,D,C}发生了变化,说明左子树结构特殊,进一步令中’:L’-D’-R’已知B,DC后’:L’-R’-D’已知DC,B可知L’=0,即D’=B,R’= DC可以画出二叉树示意图为:Array所以前序序列= ABCD变式训练2-2:中序序列=ABC,后序序列=CBA,求前序序列【解析】设根节点为D≠0,左子树为L,右子树为R,有遍历顺序为:前:D-L-R 待求中:L-D-R 已知ABC后:L-R-D 已知通过观察可知,L=0,D-R=ABC,R-D=CBA所以前序序列=D-L-R= D-R=ABC变式训练2-3:前序序列=ABC,中序序列=CBA,求后序序列【解析】设根节点为D≠0,左子树为L,右子树为R,有遍历顺序为:前:D-L-R 已知A,BC中:L-D-R 已知CB,A后:L-R-D 待求通过观察可知,D=A ,L={B,C},R=0所以后序序列=CBA (一边偏)题型二:求二叉树的深度。
第五章二叉树
树为空
树为空
根的左右子 树都不空
二、二叉树的性质
第1层(根) 第2层 第3层
第4层
1、若层次从1开始,则第i层最多有2 i-1个结点 2、高度为h的二叉树最多有2h -1个结点 3、任何一棵二叉树,若叶子结点数为n0,度为2的结点数 为n2,则n0 = n2 + 1
5.2.2 二叉树的性质
二叉树具有下列重要性质: 性质1: 在二叉树的第i层上至多有2i-1个结点(i>=1)。
二叉树的二叉链表存储表示
Elem val(){return data;} void setVal(const Elem e){data=e;} inline BinTreeNode<Elem>* left(){return lchild;} inline BinTreeNode<Elem>* right(){return rchild;} void setLeft(BinTreeNode<Elem>* left){lchild=left;} void setRight(BinTreeNode<Elem>* right){rchild=right;} bool isLeaf()
Elem data; BinTreeNode * lchild; BinTreeNode * rchild; public:
BinTreeNode(){lchild=rchild=NULL;} BinTreeNode(Elem e,BinNodePtr*l=NULL,
BinNodePtr*r=NULL) {data=e; lchild=l; rchild=r;} ~BinTreeNode(){}
n0,度为2的结点数为n2,则n0=n2+1。
完全二叉树的总结点数公式
完全二叉树的总结点数公式完全二叉树是一种特殊的二叉树结构,它的每个节点都有两个子节点,除了最后一层的叶子节点外,其他层的节点都是满的。
在完全二叉树中,叶子节点只会出现在最后一层或者倒数第二层,并且最后一层的叶子节点都靠左排列。
在这篇文章中,我们将探讨完全二叉树的总结点数公式以及相关的性质。
完全二叉树的总结点数公式是一个重要的数学公式,它可以帮助我们计算完全二叉树中节点的数量。
这个公式的表达式如下:总结点数 = 2的h次方 - 1其中,h代表完全二叉树的高度。
这个公式的推导过程是基于完全二叉树的性质而得出的。
在完全二叉树中,每一层的节点数都是满的,除了最后一层。
因此,在计算总结点数时,我们只需要计算除了最后一层外的节点数量,然后再加上最后一层的节点数即可。
我们来看完全二叉树的第一层。
由于完全二叉树的定义,第一层只有一个节点,即根节点。
因此,第一层的节点数为1。
接下来,我们来看完全二叉树的第二层。
根据完全二叉树的定义,第二层的节点数等于第一层节点数的两倍,即2。
继续往下,我们可以得到第三层的节点数为4,第四层的节点数为8,以此类推。
可以观察到,每一层的节点数都是2的次方。
因此,我们可以用2的h次方来表示每一层的节点数。
接下来,我们需要计算除了最后一层之外的节点数。
在完全二叉树中,除了最后一层的节点数是满的,其他层的节点数都是满的。
如果完全二叉树的高度为h,那么除了最后一层之外的节点数可以用以下公式表示:除最后一层之外的节点数 = 2的(h-1)次方 - 1接下来,我们需要计算最后一层的节点数。
根据完全二叉树的定义,最后一层的节点数是小于或等于前面各层节点数的两倍。
因此,最后一层的节点数可以用以下公式表示:最后一层的节点数 = 2的(h-1)次方或者 2的h次方 - 2的(h-1)次方我们将除了最后一层之外的节点数和最后一层的节点数相加,即可得到完全二叉树的总结点数。
将上述公式代入,我们可以得到完全二叉树的总结点数公式:总结点数 = 2的(h-1)次方 - 1 + 2的h次方 - 2的(h-1)次方简化上述公式,我们可以得到:总结点数 = 2的h次方 - 1这就是完全二叉树的总结点数公式。
二叉树的基本性质
二叉树的基本性质(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点;解释:最多的时候是满二叉树,它的第1层有21-1=1个结点;第2层有22-1=2个结点;第3层23-1=4个结点;第4层有24-1=8个结点;……(2)深度为m的二叉树最多有2m-1个结点,最少有m个结点;(3)对于任意一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个;即如果其叶子结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]+1表示取log2n的整数部分;(5)给定N个节点,能构成h(N)种不同的二叉树;h(N)为卡特兰数的第N项。
h(n)=C(n,2*n)/(n+1)。
(6)具有n个结点的完全二叉树的深度为[log2n]+1;(7)设完全二叉树共有n个结点。
如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论:①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2);②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。
性质1 在二叉树的第i层上至多有2i-1个结点(i>=1)。
证明采用归纳法证明此性质。
当i=1时,只有一个根结点,2i-1=20 =1,命题成立。
现在假定对所有的j,1<=j<i,命题成立,即第j层上至多有2j-2个结点,那么可以证明j=i时命题也成立。
由归纳假设可知,第i-1层上至多有2i-2个结点。
由于二叉树每个结点的度最大为2,故在第i层上最大结点数为第i-1层上最大结点数的二倍,即2×(2i-2)=2i-1。
性质2 深度为k的二叉树至多有2k-1个结点(k>=1)。
数据结构 -第12周查找第3讲-二叉排序树.pdf
以二叉树或树作为表的组织形式,称为树表,它是一类动态查找表,不仅适合于数据查找,也适合于表插入和删除操作。
常见的树表:二叉排序树平衡二叉树B-树B+树9.3.1 二叉排序树二叉排序树(简称BST)又称二叉查找(搜索)树,其定义为:二叉排序树或者是空树,或者是满足如下性质(BST性质)的二叉树:❶若它的左子树非空,则左子树上所有节点值(指关键字值)均小于根节点值;❷若它的右子树非空,则右子树上所有节点值均大于根节点值;❸左、右子树本身又各是一棵二叉排序树。
注意:二叉排序树中没有相同关键字的节点。
二叉树结构满足BST性质:节点值约束二叉排序树503080209010854035252388例如:是二叉排序树。
66不试一试二叉排序树的中序遍历序列有什么特点?二叉排序树的节点类型如下:typedef struct node{KeyType key;//关键字项InfoType data;//其他数据域struct node*lchild,*rchild;//左右孩子指针}BSTNode;二叉排序树可看做是一个有序表,所以在二叉排序树上进行查找,和二分查找类似,也是一个逐步缩小查找范围的过程。
1、二叉排序树上的查找Nk< bt->keybtk> bt->key 每一层只和一个节点进行关键字比较!∧∧p查找到p所指节点若k<p->data,并且p->lchild=NULL,查找失败。
若k>p->data,并且p->rchild=NULL,查找失败。
查找失败的情况加上外部节点一个外部节点对应某内部节点的一个NULL指针递归查找算法SearchBST()如下(在二叉排序树bt上查找关键字为k的记录,成功时返回该节点指针,否则返回NULL):BSTNode*SearchBST(BSTNode*bt,KeyType k){if(bt==NULL||bt->key==k)//递归出口return bt;if(k<bt->key)return SearchBST(bt->lchild,k);//在左子树中递归查找elsereturn SearchBST(bt->rchild,k);//在右子树中递归查找}在二叉排序树中插入一个关键字为k的新节点,要保证插入后仍满足BST性质。
