后序遍历的非递归算法.doc
二叉树后序遍历的递归和非递归算法

安 徽电气工 程 职 业 技术学 院学报
:薹6 M2 a r 0 c h 0
.
-X树后序遍历的递归和非递归算法
孙泽宇, 赵国增 , 舒云星・
( 洛阳工业高等专科学校计算机系 , 河南 洛阳 4 10 ) 703
[ 要 ] 论述了二又树后序遍历的递归算法和非递归算法, 摘 对递归算法中的工作栈 的执行过程做 了
Srcbt e t t ie { u r
● 收稿 日期 :0 5—1 0 70 . 2— 2
作者筒介: 孙泽字(97 . 吉林长春人. 17 一) 男。 洛阳工业高等专科学校计算机秉麓师。研究方向: 人工智能。 趟 目增 (97 . 河南越壁人 。 阳工业高等专科 学校计算机 秉麓师 。研究方 向: 1 一) 男。 7 洛 人工智能。
s c br 木e , r h;} t t ie lt 木 i t m te f g
后序遍历二叉树的递归算法如下 :
T p d fs u tBT o e y e e r c in d t
法及执行时栈 的变化情况 , 可设计 出较好 的非递归化算法 , 本文讨论了二叉树后序遍历的递归和非递归
算法。 2 后序遍历二叉树的递归算法
1 后序遍历左子树( ) 若左子树不为空 ) 2 后序遍历右子树( ) 若右子树不为空 ) 3 访问根结点 ( ) 若存在根结点)
二叉树数据结构如下 :
二叉树是数据结构 中最常见 的存储形式 , 在算法与数据结构中经常使用。树与森林都可以转换为 二叉树 , 而遍历算法则是二叉树最重要的操作 。所谓遍历二叉树 , 就是遵从某种次序 , 遍访二叉树 中的
所有结点, 使得每个结点被访问一次 , 而且仅一次。在遍历算法中, 递归算法是最普遍 的, 弄清 了递归算
后序遍历的非递归算法(C详细)

后序遍历的非递归算法(C详细)后序遍历是二叉树遍历的一种方式,它的顺序是先遍历左子树,然后遍历右子树,最后访问根节点。
非递归实现后序遍历的算法可以使用栈来辅助实现。
首先,我们需要定义一个树节点的数据结构,例如:```cstruct TreeNodeint val;struct TreeNode* left;struct TreeNode* right;};```接下来,我们使用一个辅助栈来进行非递归后序遍历。
首先需要创建一个空栈,并将根节点入栈。
然后开始循环,直到栈为空为止。
在循环中,首先取出栈顶节点,如果该节点没有左子树且没有右子树,说明该节点是叶子节点,可以直接输出该节点的值。
如果该节点有左子树或者右子树,需要判断是否已经遍历过该节点的子节点。
为了实现后序遍历的顺序,我们需要一个标记变量来记录上次访问的节点。
如果上次访问的节点是该节点的右子树,说明该节点的左右子节点都已经访问过了,可以直接输出该节点的值。
反之,如果上次访问的节点不是该节点的右子树,将该节点重新入栈,并以右、左、中的顺序将其右子树、左子树入栈。
下面给出完整的代码实现:```c#include <stdio.h>#include <stdlib.h>struct TreeNodeint val;struct TreeNode* left;struct TreeNode* right;};void postOrderTraversal(struct TreeNode* root)if (root == NULL)return;}struct TreeNode* lastVisited = NULL; // 上次访问的节点struct TreeNode* node = root; // 当前遍历的节点struct TreeNode* stack[100]; // 栈int top = -1; // 栈顶指针while (node != NULL , top != -1)if (node != NULL)stack[++top] = node; // 入栈node = node->left; // 访问左子树} elsestruct TreeNode* temp = stack[top]; // 取出栈顶节点if (temp->right == NULL , temp->right == lastVisited) printf("%d ", temp->val);top--; // 出栈lastVisited = temp; // 记录上次访问的节点} elsenode = temp->right; // 访问右子树}}}struct TreeNode* createNode(int val)struct TreeNode* node = (structTreeNode*)malloc(sizeof(struct TreeNode));if (node != NULL)node->val = val;node->left = NULL;node->right = NULL;}return node;int mai//创建一个二叉树struct TreeNode* root = createNode(1); root->left = createNode(2);root->right = createNode(3);root->left->left = createNode(4);root->left->right = createNode(5); root->right->left = createNode(6); root->right->right = createNode(7);//后序遍历二叉树printf("后序遍历结果:"); postOrderTraversal(root);printf("\n");return 0;```以上代码中,我们使用了一个辅助数组作为栈来实现非递归遍历。
二叉树的遍历

二叉树的遍历算法1 先序遍历(T、p、S()、top)\*先序遍历的非递归算法,T为根指针,p为指针,指向当前结点。
使用一个栈S()、top为栈顶指针*\1.if(T=NULL)2.Printf( “这是一棵空二叉树”);3.else{△△p=T;top=0;4. While(top≠0)||(p≠NULL){△while(p≠NULL){﹡Visit(p→data); \﹡访问结点﹡\top=top+1;if (top>n) 调用栈满else{S(top)=p→rchild;P=P→lchild;}}﹡if (top≠0){p= S(top);top--;}}△}△△{算法结束}算法2 中序遍历(T、p、S()、top)\*{中序遍历的非递归算法,使用栈S(),top为栈顶指针,T指向根,p为指针,指向当前结点*\top=0,p=TWhile(top≠0)||(P≠NULL){While(P≠NULL){Top=top+1if (top>n) 调用栈满else{S(top)=p, p=p→lchied;}}If (top≠null){p=S(top);top=top-1;Visit(p→data); \﹡访问结点﹡\p=p→rchild;}}{算法结束}算法3 后序遍历(T、p、S()、top)\*后序遍历的非递归算法,T指向根,P为指标指向当前结点,使用堆栈S(),栈顶指针为top,*\1、if (t=NIL)2、then { 输出“这是一棵空树”go 22 \* 结束 *\3、else { p=t;top=0;4、 while (top≠0)||(p≠NIL) {5、 while (p≠NIL){6、 top=top+1;7、 if (top﹥n)8、调用栈满9、 else{S(top)=p;10、 p=p→lchild;}11、 }12、 if (top≠0){13、 p=S(top);top=top-114、 if (p﹤0){15、 p=-p;16、 Visit(p→data); \﹡访问结点﹡\17、 p=NIL;〕18、 else {top=top+1;19、 S(top)=-P;20、 p=p→rchild;}21、 }22、{算法结束}算法4 二叉树后序遍历(t、p、S()、top、h)\*后序遍历的非递归算法,T指向根,使用堆栈S(),top为栈顶指针,P为指针,指向当前结点,h为指针,指向刚被访问结点*\1、if (T=Nil){ 输出“这是一棵空树”go 20}2、else{﹡p=t,top=03、 if (p→lchild=Nil)&&(P→rchild=Nil)4、 then go 125、 else{△△top=top+1;S(top)=p;6、 if (p→lchild=Nil)7、 {p= p→rchild; go 3;}8、 else {△if (p→rchild=Nil)9、 go 1110、 else {top=top+1; S(top)= p→rchild;}11、 P=p→lchil; go 3}△}△△12、 Visit(p→data); \﹡访问结点﹡\13、 h=p14、 if (top=0){15、输出“栈空” go 20;}16、 else {p= S(top);top=top-1;17、 if(p→Lchild=h)OR(p→rchild=h)18、 then go 12;19、 else go 3;}}﹡20、{算法结束}。
二叉树遍历的通用非递归算法

右子 树还未访 问)( 序访 问 A的左子树 的根结点 B , 和 l ,先 )B 进 栈 . 于 B的左 子 树 为 空 , 以 B 和 1出 栈 ,中 序 访 问 B)B 由 所 ( , 和 O进栈 ( O表 示 开 始 遍 历 结 点 B 的 右 子 树 ) 由 于 B 的 右 子树 . 为空 。 B和 O出栈 ,后 序访 问 B . 和 1出 栈 。 中序 访 问 A)A ( )A ( , 和 O进栈 .先 序 访 A的 右 子 树 的 根 结 点 C , ( )C和 1进 栈 , 由 于 C的左子树为空 , C和 l出栈 .中序 访问 C 。 ( )C和 O进栈 , 由 于 C 的 右 子 树 为 空 。 和 0出 栈 . 后 序 访 问 C)A 和 O出 栈 , C ( . ( 序 访 问 A)此 时 栈 已 空 , 历 过 程 结 束 。 后 , 遍 从 上 面可 知 , 每个 结 点 进栈 、 出栈 都 是 两 次 。若 进 栈 前 访 问 该结点 , 则得 到先 序 序 列 A C; 在 第 一 次 出栈 时 济 问 该结 点 , B 若 则得 到 中序 序 列 B C: 在 第 二 次 出栈 时访 问 该 结 点 , A 若 则得 到 后 序 序 列 B A。 此 . C 因 只需 对 二 叉树 遍 历 一 次 即 可 得 到 三 种 遍 历序 列 这里的关键是设置了一个标志位 . 用来 说明该结点的右子树 是 否 已访 问 . 以此 表 示 该 结 点 是第 一 次 出栈 还 是 第 二 次 出栈 。
维普资讯
20 0 6年 第 6期
福
建 电
脑
11 2
二叉树遍历的通用非递归算 法
徐凤生 1 李立群 2 马夕荣 2
( . 州 学 院 计算 机 系 。 东 德 州 2 32 2 山 东省 农 业 管 理 干部 学 院 , 东 济 南 2 0 0 ) 1德 山 503 . 山 5 10
(完整word版)数据结构-树练习题

数据结构-树练习题一、选择题1、二叉树的深度为k,则二叉树最多有( C )个结点。
A. 2kB. 2k-1C. 2k-1D. 2k-12、用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组R[1..N]中,若结点R[i]有右孩子,则其右孩子是( B )。
A. R[2i-1]B. R[2i+1]C. R[2i]D. R[2/i]3、设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前面的条件是( B )。
A. a在b的右方B. a在b的左方C. a是b的祖先D. a是b的子孙4、设一棵二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树先序遍历序列为()。
A. adbceB. decabC. debacD. abcde5、在一棵具有5层的满二叉树中结点总数为( A )。
A. 31B. 32C. 33D. 166、由二叉树的前序和后序遍历序列( B )惟一确定这棵二叉树。
A. 能B. 不能7、某二叉树的中序序列为ABCDEFG,后序序列为BDCAFGE,则其左子树中结点数目为(C )。
A. 3B. 2C. 4D. 58、若以{4,5,6,7,8}作为权值构造哈夫曼树,则该树的带权路径长度为(C )。
A. 67B. 68C. 69D. 709、将一棵有100个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为(A )。
A. 98B. 99C. 50D. 4810、表达式a*(b+c)-d的后缀表达式是( B )。
A. abcd+-B. abc+*d-C. abc*+d-D. -+*abcd11、对某二叉树进行先序遍历的结果为ABDEFC,中序遍历的结果为DBFEAC,则后序遍历的结果是( B )。
A. DBFEACB. DFEBCAC. BDFECAD. BDEFAC12、树最适合用来表示( C )。
数据结构期末试题及答案

计算机科学与技术、网络工程本科《数据结构》期末考试试卷一、选择题〔单选题,每小题3分,共33分〕1.已知某二叉树的中序、层序序列分别为DBAFCE、FDEBCA,则该二叉树的后序序列为。
A.BCDEAF B.ABDCEF C.DBACEF D.DABECF 2.在11个元素的有序表A[1…11]中进行折半查找〔⎣⎦2/)low+〕,查找元素(highA[11]时,被比较的元素的下标依次是。
A.6,8,10,11 B.6,9,10,11 C.6,7,9,11 D.6,8,9,113.由元素序列〔27,16,75,38,51〕构造平衡二叉树,则首次出现的最小不平衡子树的根〔即离插入结点最近且平衡因子的绝对值为2的结点〕为。
A.27 B.38 C.51 D.754.利用逐点插入法建立序列〔50,72,43,85,75,20,35,45,65,30〕对应的二叉排序树以后,查找元素30要进行次元素间的比较。
A.4 B.5 C.6 D.75.循环链表的主要优点是。
A.不再需要头指针了B.已知某个结点的位置后,很容易找到它的直接前驱结点C.在进行删除后,能保证链表不断开D.从表中任一结点出发都能遍历整个链表6.已知一个线性表〔38,25,74,63,52,48〕,假定采用散列函数h〔key〕=key%7计算散列地址,并散列存储在散列表A[0…6]中,若采用线性探测方法解决冲突,则在该散列表上进行等概率查找时查找成功的平均查找长度为。
A.1.5 B.1.7 C.2.0 D.2.37.由权值为9,2,5,7的四个叶子结点构造一棵哈夫曼树,该树的带权路径长度为。
A.23 B.37 C.44 D.468.在最好和最坏情况下的时间复杂度均为O〔nlogn〕且稳定的排序方法是。
A.基数排序B.快速排序C.堆排序D.归并排序9.无向图G=(V,E),其中V={a,b,c,d,e,f},E={(a,b),〔a,e〕,(a,c),〔b,e〕,〔c,f〕,(f,d),〔e,d〕}。
二叉树后序遍历的非递归算法

二叉树后序遍历的非递归算法
二叉树后序遍历是指按照左子树、右子树、根节点的顺序遍历二叉树的过程。
与前序遍历和中序遍历不同,后序遍历需要考虑根节点的位置,因此需要使用栈来存储节点信息。
非递归算法一般使用栈来实现,因为后序遍历的过程中需要先遍历左子树和右子树,最后才遍历根节点,所以存储节点信息的栈需要进行一些特殊处理。
下面是二叉树后序遍历的非递归算法:
1. 创建一个空栈,并将根节点入栈。
2. 创建一个辅助变量pre表示上一个被遍历的节点。
3. 当栈不为空时,取出栈顶元素top,判断它是否为叶子节点或者它的左右子节点都被遍历过了(被遍历过的节点可以通过辅助变量pre来判断)。
4. 如果top为叶子节点或者它的左右子节点都被遍历过了,则将top出栈,并将它的值输出。
5. 如果不满足条件3,判断top的右子节点是否为pre,如果是,则说明右子树已经遍历完了,此时可以直接输出top的值,并将top出栈;如果不是,则将top的右子节点入栈。
6. 将top的左子节点入栈。
7. 将上一个被遍历的节点pre更新为top。
根据这个算法,我们可以分别对左子树和右子树进行遍历,并保证根节点最后被遍历到,从而实现二叉树的后序遍历。
这个算法的时间复杂度为O(n),空间复杂度为O(n)。
总的来说,二叉树的后序遍历是一种比较复杂的遍历方式,需要使用栈保存节点信息,并且需要特殊处理根节点的位置。
使用非递归算法实现后序遍历可以优化空间复杂度和避免栈溢出的问题。
数据结构-1_真题-无答案

数据结构-1(总分100,考试时间90分钟)一、单项选择题在每小题列出的四个选项中只有一个选项是符合题目要求的1. 设数组data[0..m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作的语句为( )A. front:=front+1B. front:=(front+1)mod mC. rear:=(rear+1)mod mD. front:=(front+1)mod(m+1)2. 在Hash函数H(k)=k MOD m中,一般来讲,m应取( )A. 奇数B. 偶数C. 素数D. 充分大的数3. 实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用( )存储结构。
A. 二叉链表B. 广义表C. 三叉链表D. 顺序4. 向一个栈顶指针为Top的链栈中插入一个s所指结点时,其操作步骤为( )A. Top—>next=s;B. s—>next=Top—>next;Top—>next=s;C. s—>next=Top;top=s;D. s—>next=Top; Top=Top—>next;5. 快速排序在最坏情况下的时间复杂度是( )A. O(nlogB. O(n2)C. O(n3)D. 都不对6. 内部排序的方法有许多种,( )方法是从未排序序列中依次取出元素,与已排序序列中的元素作比较,将其放入已排序序列的正确位置上。
A. 归并排序B. 插入排序C. 快速排序D. 选择排序7. 对于一个具有N个顶点的图,如果我们采用邻接矩阵法表示,则此矩阵的维数应该是( )A. (N-1)×(N-1)B. N×NC. (N+1)×(N+1)D. 不确定8. 在一个长度为n的顺序表(顺序存储的线性表)中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需向后移动( )个元素。
A. n-iB. n-i+1C. n-i-1D. i9. 下面四种排序方法中,平均查找长度最小的是( )A. 插入排序B. 选择排序C. 快速排序D. 归并排序10. 如果我们采用二分查找法查找一个长度为n的有序表,则查找每个元素的平均比较次数( )对应的判定树的高度(假设树高h≥2)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章树二叉树后序遍历的非递归算法。
在对二叉树进行后序遍历的过程中,当指针p 指向某一个结点时,不能马上对它进行访问,而要先遍历它的左子树,因而要将此结点的地址进栈保存。
当其左子树遍历完毕之后,再次搜索到该结点时(该结点的地址通过退栈得到) ,还不能对它进行访问,还需要遍历它的右子树,所以,再一次将此结点的地址进栈保存。
为了区别同一结点的两次进栈,引入一个标志变量nae,有0 表示该结点暂不访问 1 表示该结点可以访问标志flag 的值随同进栈结点的地址一起进栈和出栈。
因此,算法中设置两个空间足够的堆栈,其中, STACKlCM] 存放进栈结点的地址, STACK2[M] 存放相应的标志n 昭的值, 两个堆栈使用同一栈顶指针top , top 的初值为— 1 。
具体算法如下:#defineH 100 /•定义二叉树中结点最大数目。
/voidPOSTOiRDER(BTREET){/ *T 为二叉树根结点所在链结点的地址。
/BTREESTACKl[H] , p=T ;intSTACK2[M] , flag,top= —1;if(T!=NULL)d0{while(p!=NULL){STACK/[++top]=p ; /•当前p所指结点的地址进栈•/STACK2[top]= 0 ; /,标志0 进栈•/p=p->lchild ;/•将p 移到其左孩子结点x/}p=STACKl[top) ;flag=STACK2[top--] ;if(flag==0){ STACKl[++top]=p ; /,当前p所指结点的地址进栈。
/STACK2[toP]=1 ; /•标志1 进栈•/p=p->rchild ; /x将p移到其右孩子结点o/}else{VISIT(p) ; /x访问当前p所指的结点x/p=NULL ;}}while(p!=NULLtttop!=-1) ;} 不难分析,上述算法的时间复杂度同样为O(n)7.6.3 二叉树的线索化算法对--X 树的线索化,就是把二叉树的二叉链表存储结构中结点的所有空指针域改造成指向某结点在某种遍历序列中的直接前驱或直接后继的过程, 因此, 二叉树的线索化过程只能在对二叉树的遍历过程中进行。
下面给出二叉树的中序线索化的递归算法。
算法中设有指针pre,用来指向中序遍历过程中当前访问的结点的直接前驱结点,pre的初值为头结点的指针;T初始时指向头结点,但在算法执行过程中,T总是指向当前访问的结点。
voldlNTHREAD(TBTREET) { TBTREE pre ;if(T!=Null){INTHREAD(T —>lchild);if(T —>rchild==NULL)T—>rbit=O ;if(T —>lchild==NUll);T—>lchild=pre ;T—>lbit=0 ;}if(pre —>rbitc==0)pre—>rchild=T ;pre=T ;inthread(T->rchild);} }平均查找长度(AverageSearchLength):确定一个元素在树中的位置所需要进行的比较次数的期望值。
二叉树的内路径长度(InternalPathLength):从二叉树根结点到某结点所经过的分支数目定义为该结点的路径长度。
二叉树中所有结点的路径长度之和定义为该二叉树的内路径长度IPL。
图7。
25(h)给出的二叉排序树的内路径长度为IPL : 1X2+2X2+3X1+4X2=17二叉树的外路径长度(ExternalPathLength):为了分析查找失败时的查找长度,在二叉树中出现空子树时,增加新的空叶结点来代表这些空子树,从而得到一棵扩充后的二叉树。
为了与扩充前的二叉树相区别,这些新增添的空的叶结点用小方块代表,称之为外部结点,树中原有的结点为内部结点。
图7. 27给出了一棵扩充后的二叉树,其外路径长度EPL是二叉树中所有外部结点的路径长度之和,即习题7.1判断题(在你认为正确的题后的括号中打",否则打X)。
(1) 在树型结构中,每一个结点最多只有一个前驱结点,但可以有多个后继结点。
( )(2) 在树型结构中,每—个结点不能没有前驱结点。
( )(3) 在度为k 的树中,至少有一个度为k 的结点。
( )(4) 在度为k 的树中,每个结点最多有k—1 个兄弟结点。
( )(5) 度为2 的树是二叉树。
( )(6) 二叉树的度一定为2。
( )(7) 在非空完全二叉树中,只有最下面一层的结点为叶结点。
( )(8) 在完全-y .树中,没有左孩子的结点一定是叶结点。
()(9) 在完全二叉树中,没有右孩子的结点一定是叶结点。
( )(10) 在结点数目一定的前提下,各种形态的二叉树中,完全二叉树具有最小深度。
( )(11) 满二叉树一定是完全二叉树。
( )(12) 满二叉树中的每个结点的度不是0 就是2。
( )(13) 在所有深度相同的二叉树中,满二叉树具有最大结点数目。
( )(14) 具有n 个结点的非空二叉树一定有n—1 个分支。
( )(15) n 个结点的二叉树采用二叉链表结构,链表中有n—1 个存放NULL 的指针域。
( )(16) “退化二叉树”不宜采用顺序存储结构的主要原因是空间浪费较大。
( )(17) 由二叉树的前序序列和中序序列可以惟一地确定一棵二叉树。
( )(18) 由二叉树的中序序列和后序序列可以惟一地确定一棵二叉树。
( )(19) 由二叉树的前序序列和后序序列可以惟一地确定一棵二叉树。
( )(20) 实现二叉树的按层次遍历算法时需要用到队列结构。
( )(21) 实现二叉树的遍历算法时不需要用到堆栈结构。
( )(22) 线索二叉树对应的二叉链表中不存在空的指针域。
( )(23) 二叉排序树中的任何一棵子树也是二叉排序树。
( )(24) 一个序列对应的二叉排序树是惟一的。
( )(25) 按照“逐点插入法”建立的二叉排序树的深度与结点的插入顺序无关。
( )(26) 在二叉排序树中进行查找的效率与二叉排序树的深度有关。
( )(27) 在二叉排序树中查找一个结点,查找长度不会超过二叉树的深度。
( )(28) 给定一组权值,构造出来的哈夫曼树是惟一的。
( )(29) 哈夫曼树中不存在度为 1 的结点。
( )(30) 在哈夫曼树中,权值相同的叶结点都在同一层上。
( )7. 2 单项选择题。
(1) 树型结构最适合用来描述——。
A •有序的数据元素B•无序的数据元素C.数据元素之间具有层次关系的数据 D .数据元素之间没有关系的数据(2) 对于一棵具有n 个结点、度为4的树而言,——。
A .树的深度最多是n-4B .树的深度最多是n-3C.第i层上最多有4x(i-1)个结点D.最少在某一层上正好有4个结点(3) “二叉树为空”意味着二叉树————。
A •由一些未赋值的空结点组成B.根结点无子树巳不存在D.没有结点(4) 按照二叉树的定义,具有3个结点的二叉树有——种形态(不考虑数据信息的组合情况)。
A. 2B. 3C. 4D. 5(5) 若一棵度为7 的树有8 个度为1 的结点,有7 个度为2 的结点,有6 个度为3 的结点,有5个度为4的结点,有4 个度为5的结点,有3个度为6的结点,有 2 个度为7的结点,则该树一共有——个叶结点。
A .35 B.28 C.77 D.78(6) 若一棵二叉树有10 个度为2 的结点,则该二叉树的叶结点的个数是——。
A .9 B.11 C.12 D .不确定(7) 若一棵满二叉树有2047 个结点,则该二叉树中叶结点的个数为——。
A.512 B.1024C.2048 D.4096(8) 深度为h的满二叉树的第i层有一一个结点。
(i < h)A.2(i)—1 B.2(i)-1 C.2(h)—1 D.2(h)-1(9) 深度为h 的完全二叉树的第i 层有——个结点。
(i<h)A .2(i-1) B.2(i)-1 C.2(h-1) D .2(h)-1(10) 具有n 个结点的非空完全二叉树的深度为——。
A.n-1 B.n C.Llog2(n) 』D.Llog2(n) 』+1(11) 具有2000 个结点的非空二叉树的最小深度为——。
A .9 B.10 C.11 D.12(12) 若某完全二叉树的深度为h,则该完全二叉树中至少有一一个结点。
A.2(h) B.2(h)-1 c.2(h)+1 D.2(h—1)(13) 若二叉树的前序序列与后序序列的次序正好相反,则该二叉树一定是——的二叉树。
A •空或仅有一个结点B •其分支结点无左子树C.其分支结点无右子树 D .其分支结点的度都为1(14) 任何一棵非空二叉树中的叶结点在前序遍历、中序遍历与后序遍历中的相对位置—A •都会发生改变B •不会发生改变C.有可能会发生改变 D •部分会发生改变(15) 对于一个数据元素序列,按照逐点插入方法建立一棵二叉排序树,该二叉排序树的形状取决于——。
A .该序列的存储结构B.序列中数据元素的取值范围C,数据元素的输人次序 D •使用的计算机的软、硬件条件(16) 对一棵二叉排序树进行——遍历,可以得到该二叉树的所有结点按值从小到大排列的序列。
A .前序B .中序C.后序 D .按层次(17) 除了前序遍历(DLR)、中序遍历(LDR)与后序遍历(LRD)夕卜,二叉树的遍历方法还可以有DRL 、RDL 和RLD 三种。
对于一棵二叉排序树,采用——遍历方法可以得到该二叉排序树的所有结点按值从大到小排列的序列。
A .LDRB .LRD C.RLD D.RDL(18) 在二叉排序树中进行查找的效率与——有关。
A。
二叉排序树的深度 B .二叉排序树的结点的个数C.被查找结点的度 D .二叉排序树的存储结构(19) 在具有n 个结点的二叉排序树中查找一个结点的过程的时间复杂度约为——。
A .O(1)B .O(n)C .O(nz)D .O(10gan)(20) 下列名词术语中,与数据的存储结构有关系的仅是——。
A .完全二叉树B .满二叉树C.线索二叉树D .二叉排序树(21) 平衡二叉树中任意结点的平衡因子只能是——之一。
A.0,1,2 B.0,1 C.-1,+1 D.0,-1,+1 7.3 填空题。
(1) 任何非空树中有且仅有一个结点没有前驱结点,该结点就是树的——。
(2) 树的层次定义为——。
(3) 度为k的树中第i层最多有一一个结点(i > 1)。
(4) 深度为h的k叉树最多有——个结点。
(5) 非空二叉树一共有——种基本形态。
(6) 非空二叉树中第i 层最多有——个结点。
(7) 深度为h 的二叉树最多有————个结点。