讲评二叉树Word文档下载推荐.docx

上传人:b****8 文档编号:22923291 上传时间:2023-02-06 格式:DOCX 页数:23 大小:36.30KB
下载 相关 举报
讲评二叉树Word文档下载推荐.docx_第1页
第1页 / 共23页
讲评二叉树Word文档下载推荐.docx_第2页
第2页 / 共23页
讲评二叉树Word文档下载推荐.docx_第3页
第3页 / 共23页
讲评二叉树Word文档下载推荐.docx_第4页
第4页 / 共23页
讲评二叉树Word文档下载推荐.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

讲评二叉树Word文档下载推荐.docx

《讲评二叉树Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《讲评二叉树Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。

讲评二叉树Word文档下载推荐.docx

if(m<

1||m>

n||s[m]=='

cout<

<

"

endl;

else

{

i=m;

while(i!

=0)

{

cout<

s[i];

i=i/2;

}

}

}

intmain()

intn,m,i;

chart[MaxSize],c;

while(cin>

>

n>

m)

cin>

t+1;

Operate(t,n,m);

return0;

求最近公共祖先

设有一棵非空二叉树,其节点值为字符型并假设各值互不相等,采用顺序存储结构表示。

现输入其数组各元素值(空二叉树用'

表示),建立该二叉树。

请设计一个算法,输出编号分别为i和j的两个结点的最近的公共祖先结点的值。

有多组测试数据,每组数据占两行,第一行为两个整数,分别表示编号i和j(i!

=j),第二行为其数组各元素值(空二叉树用'

表示)。

输出编号i和j的最近公共祖先结点的值,若该祖先结点不存在则输出"

35

ABC#D

25

ABCDE#F

A

B

voidOperate(chars[],inti,intj)

intn;

n=strlen(s+1);

if(i<

1||j<

1||i>

n||j>

n||s[i]=='

||s[j]=='

{

=j)

if(i>

j)

i=i/2;

else

j=j/2;

s[i]<

intn,m;

chart[MaxSize];

1002:

判满二叉树

设有一棵非空二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。

设计一个算法,判断该二叉树是否为满二叉树。

若是输出"

yes"

,不是则输出"

no"

第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列。

若该二叉树是满二叉树输出"

.

2

AB#D##C##

ABD##E##C#F##

no

math.h>

structBiNode//二叉树的结点结构

chardata;

BiNode*lchild,*rchild;

};

classBiTree

public:

BiTree();

//构造函数,初始化一棵二叉树,其前序序列由键盘输入

~BiTree();

//析构函数,释放二叉链表中各结点的存储空间

BiNode*Getroot();

//获得指向根结点的指针

intheight(BiNode*root);

voidnodes(BiNode*root);

private:

BiNode*root;

//指向根结点的头指针

BiNode*Creat();

//有参构造函数调用

voidRelease(BiNode*root);

//析构函数调用

BiTree:

:

BiTree()

this->

root=Creat();

~BiTree()

Release(root);

BiNode*BiTree:

Getroot()

returnroot;

intBiTree:

height(BiNode*root)

if(root==NULL)

return0;

inthl,hr;

hl=height(root->

lchild);

hr=height(root->

rchild);

if(hl>

=hr)

returnhl+1;

else

returnhr+1;

intnum;

voidBiTree:

nodes(BiNode*root)

if(root)

num++;

nodes(root->

Creat()

BiNode*root;

charch;

cin>

ch;

if(ch=='

)root=NULL;

root=newBiNode;

//生成一个结点

root->

data=ch;

lchild=Creat();

//递归建立左子树

rchild=Creat();

//递归建立右子树

Release(BiNode*root)

if(root!

=NULL)

Release(root->

//释放左子树

//释放右子树

deleteroot;

n;

while(n--)

BiTreebt;

//按扩展前序序列创建一棵二叉树

BiNode*root=bt.Getroot();

//获取指向根结点的指针

num=0;

bt.nodes(root);

inth;

h=bt.height(root);

if(num==pow(2,h)-1)

1005:

括号表示法输出二叉树

设计一个算法,采用括号表示法输出该二叉树。

用括号表示法输出二叉树。

6

A##

AB###

A#B##

AB##C##

A(B)

A(,B)

A(B,C)

A(B(,D),C)

A(B(D,E),C(,F))

voidPrint(BiNode*root);

Print(BiNode*root)

root->

data;

if(root->

lchild||root->

rchild)

'

('

;

Print(root->

if(root->

cout<

'

)'

bt.Print(root);

1004:

二叉树的宽度

二叉树的宽度是指二叉树各层结点数的最大值。

设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。

设计一个算法,输出该二叉树的宽度。

空二叉树的宽度为0。

输出该二叉树的宽度。

3

HDA##C#B##GF#E###

structSeqQueue

BiNode*data[MaxSize];

intlevel[MaxSize];

//存各结点所在层数

intfront,rear;

//定义一个顺序队列Q

intWidth();

Width()

intmax,k,n,i;

BiNode*t;

SeqQueueQ;

if(root==NULL)

Q.front=Q.rear=-1;

//初始为空队列

Q.data[++Q.rear]=root;

//根结点入队

Q.level[Q.rear]=1;

while(Q.front<

Q.rear)

t=Q.data[++Q.front];

k=Q.level[Q.front];

if(t->

lchild!

=NULL)//左孩子入队

Q.data[++Q.rear]=t->

lchild;

Q.level[Q.rear]=k+1;

if(t->

rchild!

=NULL)//右孩子入队

rchild;

}//while

max=0;

k=1;

n=0;

i=0;

while(i<

=Q.rear)

if(Q.level[i]==k)

{

n++;

i++;

}

if(n>

max)max=n;

n=0;

k=k+1;

if(n>

max)//比最后一层的

max=n;

returnmax;

}//else不为空

bt.Width()<

哈夫曼编码

由若干个值无重复的结点及其权值,建立相应的哈夫曼树,要求哈夫曼树中所有左孩子编号小于右孩子编号(以结点的输入顺序做为其编号)。

对所建的哈夫曼树,根据左0右1的原则,对各结点进行编码。

设计一个算法,对给定的若干码串进行相应的解码,并输出解码结果。

有多组测试数据,每组数据由结点信息和码串两部分组成。

结点信息部分的第一行为一个整数n(n<

=20),表示以下有n个结点信息,每个结点信息包括一个字符和一个整数,表示结点值和权值;

码串部分的第一行为一个整数m,表示以下有m个码串(每个串长不超过100),码串由0和1构成,且均有效。

输出各码串对应的解码结果,每个解码结果占一行,每组测试数据后有一空行。

4

A7

G5

O2

D4

10110110111

11111010

GOOD

DOG

iostream.h>

constintMAX=20;

constintMaxLen=100;

//哈夫曼树输入数据的结构

structhuffinit

intweight;

//哈夫曼树结点的结构

structhuffnode

intlchild,rchild,parent;

//哈夫曼树编码的结构

structhuffcode

charcode[MAX+1];

//哈夫曼树类的声明

classHuffTree

HuffTree(huffinitw[],intn);

~HuffTree(){}

voidSelect(int&

min1,int&

min2,intm);

voidEncode();

voidDecode(charcode[]);

huffnodetree[2*MAX-1];

huffcodecd[MAX];

intsize;

voidHuffTree:

Decode(charcode[])

inti=0;

intj=2*(size-1);

//从根开始

while(code[i]!

='

\0'

if(code[i]=='

0'

j=tree[j].lchild;

j=tree[j].rchild;

if(tree[j].lchild==-1)

cout<

cd[j].data;

j=2*(size-1);

i++;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1