1.一颗二叉树的括号表示为“1(2(4,5(6,7)),3)”)。设N代表二叉树的根,L代表根节点的左子树,R代表根节点的右子树。若遍历后的节点序列为3,1,7,5,6,2,4,则其遍历方式是( B)。
A.LRN
B.RNL
C.NRL
D.RLN
2.若二叉树(每个节点值为单个字符)的中序遍历序列是abcdef,且c为根节点,则( D)。
A.以上都不对
B.二叉树有两个度为0的节点
C.二叉树的高度为5
D.节点c有两个孩子
3.若知道一棵二叉树的( C),便可以唯一确定该二叉树。
A.先序和后序序列
B.中序序列
C.中序和后序序列
D.先序序列
4.一棵二叉树的先序遍历序列为ABCDEFG,它的中序遍历序列可能是( D)。
A.ADCFEG
B.CABDEFG
C.DACEFBG
D.ABCDEFG
解析: D、当一棵二叉树所有节点的左子树为空时,先序遍历序列和中序遍历序列相同。先序序列和中序序列可以确定一棵二叉树,这里由选项A、C和D的中序序列无法确定一棵二叉树。
5.一棵二叉树的先序遍历序列为ABCDEF,中序遍历序列为CBAEDF,则后序遍历序列为(C )
A.CBEDFA
B.FEDCBA
C.CBEFDA
D.不确定
6.某棵二叉树中,X节点有左孩子Y节点,则在其先序遍历中(B )。
A.访问X节点后,接着遍历Y节点的左子树,然后访问Y节点
B.访问X节点后立即访问Y节点
C.访问Y节点后,接着遍历Y节点的左子树,然后访问X节点
D.访问Y节点后立即访问X节点
7.关于二叉树(含2个以上的节点)的先序遍历序列中,以下正确的是(B )。
A.先序遍历序列的第一个节点一定是叶子节点
B.先序遍历序列的最后一个节点一定是叶子节点
C.先序遍历序列的最后一个节点是根节点
D.以上都不对
8.若一棵完全二叉树中每个节点值为单个字符,其后序遍历序列为CDBFGEA,则其先序遍历序列是( C)。
A.CBDAFEG
B.无法确定
C.ABCDEFG
D.ABECDFG
9.任何一棵二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序( B)。
A.以上都不对
B.相同
C.不相同
D.不能确定
10.若二叉树采用二叉链存储结构,要删除该二叉链中所有节点并释放它们占用的空间,利用( C)遍历方法最合适。
A.先序
B.中序
C.后序
D.层次
解析: C、先释放左子树的空间,再释放右子树的空间,最后释放根节点的空间。
11.判断线索二叉树中p节点为叶子节点的条件是(B )。
A.p->ltag= =0 && p->rtag= =0
B.p->ltag= =1 && p->rtag= =1
C.p->ltag= =1
D.p->lchild= =NULL && p->rchild= =NULL
解析: B、p节点左、右指针均为线索,表示它们原来都为空,即为叶子节点。
12.n个节点的线索二叉树上含有的线索个数为(C )。
A.n
B.n-1
C.n+1
D.2n
解析: C、n个节点的指针域个数为2n,指向孩子的指针域个数为n-1,所以线索个数=2n-(n-1)=n+1
13.设有一棵哈夫曼树的节点总数为35,则该哈夫曼树共有(B )个叶子节点。
A.30
B.18
C.35
D.20
解析: B、2n0-1=35,则n0=18。
14.根据使用频率为5个字符设计的哈夫曼编码不可能是( B)。
A.111,110,10,01,00
B.100,11,10,1,0
C.000,001,010,011,1
D.001,000,01,11,10
15.下面关于哈夫曼树的说法,错误的是(C )。
A.对应于一组权值构造出的哈夫曼树可能不是唯一的
B.哈夫曼树具有最小带权路径长度
C.哈夫曼树中除了度为1的节点外,还有度为2的节点和叶子节点
D.哈夫曼树中没有度为1的节点
1 .若某非空二叉树的先序序列和后序序列正好相同,则该二叉树的形态是什么?
答:空或只有一个节点。
2 .一棵二叉树的先序、中序和后序序列分别如下,其中有一部分未显示出来。试求出空格处的内容,并画出该二叉树。
先序序列: B F ICEH G
中序序列:D KFIA EJC
后序序列: K FBHJ G A
答:
先序序列:ABDFKICEHJG
中序序列:DBKFIAHEJCG
后序序列:DKIFBHJEGCA
(A(B(D,F(K,I)),C(E(H,J),G)))
3 .一棵二叉树采用二叉链存储结构b表示,所有节点值均不相同,有以下算法:
int fun(BTNode *b)
{ int num1,num2,n;
if (b= =NULL)
return 0;
else if ((b->lchild= =NULL && b->rchild!=NULL) ||
(b->lchild!=NULL && b->rchild==NULL))
n=1;
else
n=0;
num1=fun(b->lchild);
num2=fun(b->rchild);
return (num1+num2+n);
}
(1)指出fun(b)算法的功能。
(2)当二叉树b的括号表示为" A(B(D(,G)),C(E,F))"时,执行fun(b)后其返回结果是么?
答:(1)计算度为1的节点个数
(2)2
4 .给出在中序线索二叉树中查找节点p的后继节点的过程。
答:

void Thread(TBTNode *&p)
{if(p!=NULL){Thread(p->lchild);if(p->lchild==NULL){p->lchile=pre;p->ltag=1;}else p->ltag=0;if(pre->rchild==NULL){pre->rchild=p;pre->rtag=1;}else pre->rtag=0;pre=p;Thread(p->rchild);}
}

5 .如果一棵哈夫曼树T中共有255个节点,那么该树用于对几个字符进行哈夫曼编码?
答:128个。
6 .假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法void findparent(BTNode *b,char x,BTNode *&p)求二叉树b中指定值为x的节点的双亲节点p,提示:根节点的双亲为NULL,若在b中未找到值为x的节点,p亦为NULL,并假设二叉树中所有节点值是唯一的。
答:

BTNode *findparent(BTNode *b,char x)
{cout<<b->lchild->data<<"      "<<b->rchild->data<<endl;BTNode *p;if(b==NULL) return NULL;else if(b->lchild->data==x||b->rchild->data==x) return b;else{p=findparent(b->lchild,x);if(p==NULL) return findparent(b->rchild,x);}
}

7 .假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法求二叉树b的最小枝长。所谓最小最小枝长是指的是根节点到最近叶子节点的路径长度。
答:

#include <iostream>
#include <stdlib.h>
using namespace std;
const int MaxSize=100;
typedef struct node
{char data;struct node *lchild,*rchild;
}BTNode;
void CreatBTNode(BTNode *&b,char *str)
{BTNode *St[MaxSize],*p;int top=-1,k,j=0;char ch;b=NULL;ch=str[j];while(ch!='\0'){switch(ch){case'(':top++;St[top]=p;k=1;break;case')':top--;break;case',':k=2;break;default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)  b=p;else{switch(k){case 1:St[top]->lchild=p; break;case 2:St[top]->rchild=p; break;}}}j++;ch=str[j];}
}
int run(BTNode *root){if(root==NULL)return 0;if((root->lchild==NULL)&&(root->rchild==NULL))return 1;if(root->lchild==NULL)return run(root->rchild)+1;if(root->rchild==NULL)return run(root->lchild)+1;return min(run(root->rchild)+1,run(root->lchild)+1);}
int main()
{BTNode *b;char str[100]="A(B(D(H,I),E),C(F(J,K),G(L,M)))";CreatBTNode(b,str);cout<<run(b);return 0;
}

8 .假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法,求二叉树b中第k层(根节点的层次为1)上节点个数。
答:

#include <iostream>
#include <stdlib.h>
using namespace std;
const int MaxSize=100;
int k,m=0;
typedef struct node
{char data;struct node *lchild,*rchild;
}BTNode;
BTNode *t,*r;
void CreatBTNode(BTNode *&b,char *str)
{BTNode *St[MaxSize],*p;int top=-1,k,j=0;char ch;b=NULL;ch=str[j];while(ch!='\0'){switch(ch){case'(':top++;St[top]=p;k=1;break;case')':top--;break;case',':k=2;break;default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)  b=p;else{switch(k){case 1:St[top]->lchild=p; break;case 2:St[top]->rchild=p; break;}}}j++;ch=str[j];}
}
void DispBTNode(BTNode *b)
{if(b!=NULL){cout<<b->data;if(b->lchild!=NULL||b->rchild!=NULL){cout<<"(";DispBTNode(b->lchild);if(b->rchild!=NULL)cout<<",";DispBTNode(b->rchild);cout<<")";}}
}
int level(BTNode *b,char x,int h)
{int l;if(b==NULL) return 0;else if(b->data==x) return h;else{l=level(b->lchild,x,h+1);if(l==0) return level(b->rchild,x,h+1);else return l;}
}
int PreOrder(BTNode *b,int k)
{r=t;if(b!=NULL){if(level(r,b->data,1)==k) m++;PreOrder(b->lchild,k);PreOrder(b->rchild,k);}return m;
}
int main()
{BTNode *b;char str[100]="A(B(D(H,I),E),C(F(J,K),G(L,M)))";CreatBTNode(b,str);t=b;cin>>k;cout<<PreOrder(b,k);return 0;
}

9 .假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法,输出二叉树b中第k层(根节点的层次为1)上的所有叶子节点。
答:

#include <iostream>
#include <stdlib.h>
using namespace std;
const int MaxSize=100;
int k,m=0;
typedef struct node
{char data;struct node *lchild,*rchild;
}BTNode;
BTNode *t,*r;
void CreatBTNode(BTNode *&b,char *str)
{BTNode *St[MaxSize],*p;int top=-1,k,j=0;char ch;b=NULL;ch=str[j];while(ch!='\0'){switch(ch){case'(':top++;St[top]=p;k=1;break;case')':top--;break;case',':k=2;break;default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)  b=p;else{switch(k){case 1:St[top]->lchild=p; break;case 2:St[top]->rchild=p; break;}}}j++;ch=str[j];}
}
void DispBTNode(BTNode *b)
{if(b!=NULL){cout<<b->data;if(b->lchild!=NULL||b->rchild!=NULL){cout<<"(";DispBTNode(b->lchild);if(b->rchild!=NULL)cout<<",";DispBTNode(b->rchild);cout<<")";}}
}
int level(BTNode *b,char x,int h)
{int l;if(b==NULL) return 0;else if(b->data==x) return h;else{l=level(b->lchild,x,h+1);if(l==0) return level(b->rchild,x,h+1);else return l;}
}
void PreOrder(BTNode *b,int k)
{r=t;if(b!=NULL){if(level(r,b->data,1)==k) cout<<b->data<<" ";PreOrder(b->lchild,k);PreOrder(b->rchild,k);}
}
int main()
{BTNode *b;char str[100]="A(B(D(H,I),E),C(F(J,K),G(L,M)))";CreatBTNode(b,str);t=b;cin>>k;PreOrder(b,k);return 0;
}

10 .假设二叉树中每个节点值为单个字符,采用二叉链存储结构存储。设计一个算法,判断值为x的节点与值为y的节点是否互为兄弟,假设这样的节点值是唯一的。
答:

#include <iostream>
#include <stdlib.h>
using namespace std;
const int MaxSize=100;
int k,m=0;
typedef struct node
{char data;struct node *lchild,*rchild;
}BTNode;
void CreatBTNode(BTNode *&b,char *str)
{BTNode *St[MaxSize],*p;int top=-1,k,j=0;char ch;b=NULL;ch=str[j];while(ch!='\0'){switch(ch){case'(':top++;St[top]=p;k=1;break;case')':top--;break;case',':k=2;break;default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)  b=p;else{switch(k){case 1:St[top]->lchild=p; break;case 2:St[top]->rchild=p; break;}}}j++;ch=str[j];}
}
void DispBTNode(BTNode *b)
{if(b!=NULL){cout<<b->data;if(b->lchild!=NULL||b->rchild!=NULL){cout<<"(";DispBTNode(b->lchild);if(b->rchild!=NULL)cout<<",";DispBTNode(b->rchild);cout<<")";}}
}
bool judge(BTNode *b,char x,char y)
{if(b==NULL) return false;if(b->lchild!=NULL&&b->rchild!=NULL){if(b->lchild->data==x&&b->rchild->data==y||b->lchild->data==y&&b->rchild->data==x)return true;}if(judge(b->lchild,x,y)) return true;else return judge(b->rchild,x,y);
}
int main()
{BTNode *b;char x='B',y='C';char str[100]="A(B(D(H,I),E),C(F(J,K),G(L,M)))";CreatBTNode(b,str);if(judge(b,x,y)) cout<<"yes";else cout<<"no";return 0;
}

MOOC 数据结构 第九周 树与二叉树(下)相关推荐

  1. 数据结构实验二 树和二叉树的实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A)     2019年5月13日 学院 计算机科学与教育软件学院 年级.专业.班 计算机科学与技术172班 姓名 学号 17061 ...

  2. 【数据结构】_树与二叉树

    目录 引言 一.什么是树? 1.树的定义 2.树的特点 3.树的表示法 二.树的一些基本术语 三.树的性质 四.什么是二叉树? 1.基本概念 2.二叉树的五种基本形态 3.二叉树的性质 五.满二叉树. ...

  3. 数据结构与算法——树和二叉树***

    第五章 :树和二叉树 树和图是两种重要的非线性结构.线性结构中结点具有唯一前驱和唯一后继的关系,而非线性结构中结点之间的关系不再具有这种唯一性.其中,树形结构中结点间的关系是前驱唯一而后继不唯一,即元 ...

  4. 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)

    文章目录 5.1 树和二叉树引入 5.1.1 树的概念 5.1.2 树的表示 5.1.3 树中基本术语 5.2 二叉树 5.2.1 概念 5.2.2 二叉树的性质 5.2.3 特殊的二叉树 5.2.4 ...

  5. 数据结构知识点总结-树、二叉树、二叉树遍历、满二叉树、完全二叉树、查找二叉树、平衡二叉树、红黑树、B树、B+树

    树 在计算器科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有层次关系的集合.把它叫做 ...

  6. 数据结构与算法——树与二叉树详细分享

    一.树 1.定义:由n个有限节点组成一个具有层次关系的集合,看起来像一颗倒挂的树,特点: 2.特点: a.每个节点有0个或多个子节点 b.没有父节点的节点称为根节点(A) c.每一个非根节点有且只有一 ...

  7. Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)

    目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...

  8. 数据结构-实验二  树和二叉树的实现

     广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼417)     2018年05月16日 学院 计算机科学与教育软件学院 年级.专业.班 网络161 姓名 卟咚君 学号 1606100 ...

  9. 【数据结构_Day05】 树和二叉树、树和森林、哈夫曼树

    1.树 根节点:非空树中无前驱结点的结点 结点的度:结点拥有的子树数 树的度:树内各结点的度的最大值 森林不一定是树,树一定是森林 2.二叉树 二叉树和树是不一样的概念 二叉树严格区分左子树和右子树, ...

  10. 数据结构上机实践第九周项目1 - 二叉树算法库

    二叉树算法库 学了新的内容就应该有新的应用,本次实践将进行二叉树算法库的建立,来适应更多工程的需求,丰富算法库. 注:在main函数中,创建的用于测试的二叉树如下 首先本次建立算法库实践将会运用到多文 ...

最新文章

  1. ASP.NET MVC 3中ViewBag, ViewData和 TempData
  2. Git-remote Incorrect username or password ( access token )
  3. 【一次面试】再谈javascript中的继承
  4. 飞桨深度学习开源框架2.0抢先看:成熟完备的动态图开发模式
  5. 关于范式的一些简单理解
  6. signature=5edb6549fd9da7abd1cea3d5008f5c15,IMPLEMENTING INVERTED MASTER-SLAVE 3D SEMICONDUCTOR STACK
  7. raspberry ubuntu 修改源为清华_Ubuntu 下 Janus Server 搭建笔记
  8. java 不刷新页面_java – 更新jsp页面的内容而不刷新
  9. WF4读书笔记(一):创建一个简单的工作流
  10. Windows 批处理(bat)语法大全
  11. 以编程方式打印 XPS 文件
  12. 三种时空模式下的全脑功能组织
  13. 设计符合人需求层次模型的商业模式——揭密冰桶挑战背后,不为人知的商业秘密!
  14. 无法调用request.getContext()解决方法
  15. IEEE trans模板格式中的分栏及左下角作者信息脚注的添加方法(Word 2010)
  16. 如何用Diffusion models做interpolation插值任务?——原理解析和代码实战
  17. 【双系统安装】win10+联想thinkpad T14 安装Ubuntu20.04
  18. 防火墙添加ip白名单_如何增加网址白名单、IP白名单、策略白名单、协同防御白名单?...
  19. 一款集成度高的渗透工具:Railgun
  20. 测试开发工程师持续更新

热门文章

  1. 华南农业大学计算机科学与技术专业,华南农业大学住宿
  2. 从零开始开发标准的s57电子海图第三篇--ECDIS标准(共一百篇)
  3. android fastboot驱动,fastboot驱动
  4. 完美刷机找不到服务器,完美刷机
  5. android开发rn插件,RN native module 插件开发
  6. Linux readelf命令
  7. 算法分析c语言版+视频教程,数据结构c语言版
  8. abaqus汉化后有结果界面中有中文乱码
  9. MD文件阅读工具及配置
  10. 软考必备资料大放送,全科目软考资料都给你备好了!