文档文库
手机版
投诉建议
热门搜索:
心得体会
演讲稿
思想汇报
首页
心得体会
学习心得体会
培训心得体会
军训心得体会
社会实践
作风建设
工作心得体会
教育心得体会
演讲稿
演讲稿格式
演讲稿范文
竞聘演讲稿
师德演讲稿
三分钟演讲稿
思想汇报
思想汇报范文
转正思想汇报
大学生思想汇报
季度思想汇报
教师思想汇报
工作计划
工作计划格式
工作计划开头
工作计划结尾
总结与计划
工作计划模板
工作总结
年终工作总结
年度工作总结
个人工作总结
实习报告
实习报告范文
实习计划范文
实习鉴定范文
实习报告内容
个人简历
求职简历
简历范文
简历模板
简历表格
简历格式
祝福语
春节
除夕
元宵
端午节
合同范文
合同范本
合同样本
合同范本格式
首页
>
2013年甘肃省数据概述入门
2013年甘肃省数据概述入门
发布时间: 来源:
文档文库
小
中
大
字号:
手机查看
1
、请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用
llink-rlink
法存储。
2
、
根据二叉排序树中序遍历所得结点值为增序的性质,
在遍历中将当前遍历结点与其前驱结
点值比较,即可得出结论,为此设全局指针变量
pre
(初值为
null
)和全局变量
flag
,初值
为
true
。若非二叉排序树,则置
flag
为
false
。
#definetrue1
#definefalse0
typedefstructnode
{datatypedata;structnode*llink,*rlink;}*BTree;
voidJudgeBST
(
BTreet,intflag
)
//
判断二叉树是否是二叉排序树,本算法结束后,在调用程序中由
flag
得出结论。
{if
(
t!=null&&flag
)
{Judgebst
(
t->llink,flag
)
;
//
中序遍历左子树
if
(
pre==null
)
pre=t
;
//
中序遍历的第一个结点不必判断
elseif
(
pre->data
data
)
pre=t
;
//
前驱指针指向当前结点
else{flag=flase
;
}//
不是完全二叉树
Judgebst
(
t->rlink,flag
)
;
//
中序遍历右子树
}//JudgeBST
算法结束
3
、
二叉树的层次遍历序列的第一个结点是二叉树的根。
实际上,
层次遍历序列中的每个结点
都是“局部根”
。确定根后,到二叉树的中序序列中,查到该结点,该结点将二叉树分为“左
根右”三部分。若左、右子树均有,则层次序列根结点的后面应是左右子树的根;若中序序
列中只有左子树或只有右子树,则在层次序列的根结点后也只有左子树的根或右子树的根。
这样,定义一个全局变量指针
R
,指向层次序列待处理元素。算法中先处理根结点,将根结
点和左右子女的信息入队列。然后,在队列不空的条件下,循环处理二叉树的结点。队列中
元素的数据结构定义如下:
typedefstruct
{intlvl;//
层次序列指针,总是指向当前“根结点”在层次序列中的位置
intl,h;//
中序序列的下上界
intf;//
层次序列中当前“根结点”的双亲结点的指针
intlr;//1
—双亲的左子树
2
—双亲的右子树
}qnode;
BiTreeCreat(datatypein[],level[],intn
//
由二叉树的层次序列
level[n]
和中序序列
in[n]
生成二叉树。
n
是二叉树的结点数
{if(n<1{printf(
“参数错误
\n
”
;exit(0;}
qnodes,Q[];//Q
是元素为
qnode
类型的队列,容量足够大
init(Q;intR=0;//R
是层次序列指针,指向当前待处理的结点
BiTreep=(BiTreemalloc(sizeof(BiNode;//
生成根结点
p->data=level[0];p->lchild=null;p->rchild=null;//
填写该结点数据
for(i=0;i
在中序序列中查找根结点,然后,左右子女信息入队列
if(in[i]==level[0]break;
if(i==0//
根结点无左子树,遍历序列的
1
—
n-1
是右子树
{p->lchild=null;
s.lvl=++R;s.l=i+1;s.h=n-1;s.f=p;s.lr=2;enqueue(Q,s;
}
elseif(i==n-1//
根结点无右子树,遍历序列的
1
—
n-1
是左子树
{p->rchild=null;
s.lvl=++R;s.l=1;s.h=i-1;s.f=p;s.lr=1;enqueue(Q,s;
}
else//
根结点有左子树和右子树
{s.lvl=++R;s.l=0;s.h=i-1;s.f=p;s.lr=1;enqueue(Q,s;//
左子树有关信息入队列
s.lvl=++R;s.l=i+1;s.h=n-1;s.f=p;s.lr=2;enqueue(Q,s;//
右子树有关信息入队列
}
while(!empty(Q//
当队列不空,进行循环,构造二叉树的左右子树
{s=delqueue(Q;father=s.f;
for(i=s.l;i<=s.h;i++
if(in[i]==level[s.lvl]break;
p=(bitreptrmalloc(sizeof(binode;//
申请结点空间
p->data=level[s.lvl];p->lchild=null;p->rchild=null;//
填写该结点数据
if(s.lr==1father->lchild=p;
elsefather->rchild=p
;
//
让双亲的子女指针指向该结点
if(i==s.l
{p->lchild=null;//
处理无左子女
s.lvl=++R;s.l=i+1;s.f=p;s.lr=2;enqueue(Q,s;
}
elseif(i==s.h
{p->rchild=null;//
处理无右子女
s.lvl=++R;s.h=i-1;s.f=p;s.lr=1;enqueue(Q,s;
}
else{s.lvl=++R;
s.h=i-1;
s.f=p;
s.lr=1;
enqueue(Q,s;//
左子树有关信息入队
列
s.lvl=++R;s.l=i+1;s.f=p;s.lr=2;enqueue(Q,s;//
右子树有关信息入队列
}
}//
结束
while(!empty(Q
return(p;
}//
算法结束
本文来源:
https://www.2haoxitong.net/k/doc/2e1f4ca0eff9aef8941e06cb.html
《2013年甘肃省数据概述入门.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
文档为doc格式
分享到:
相
关
案
例
正在进行安全检测...
2024-04-29
正在进行安全检测...
2024-04-29
正在进行安全检测...
2024-04-29
正在进行安全检测...
2024-04-29
正在进行安全检测...
2024-04-29
正在进行安全检测...
2024-04-29
安全验证
2024-04-29
正在进行安全检测...
2024-04-29
安全验证
2024-04-29
安全验证
2024-04-29
相关推荐
1
2015年度本溪市峰达钢制包装带有限公司销售收入与资产数据报告
2
三年级科学上册期中试卷分析
3
八年级上学期知识竞赛英语试题
4
(500-700kg护面石安放)验收、评定表
5
茶文化精髓所在
6
2011年店长工作总结
7
美元指数简介
8
励志语录大全
9
Lending Club 如何修炼成为全球最大P2P平台
10
教资面试高中英语试讲模板之阅读听力
推荐内容
探索发展高职学生党员的现代化管理模式
磨课心得体会
平台自动加料小车
浅谈初中语文阅读教学的见解
化工厂《用火作业许可证》2012年新版样本
交会计算
深圳2012新版上教八年级上 1-2单元复习
超短波并音频电中药离子导入综合治疗慢性盆腔炎128例
托福阅读真题汇总(一)
日本农业保险经验做法对我国建立长效农业保险机制的启示