设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
求先序线索化二叉树非递归算法?
返回列表
发新帖
求先序线索化二叉树非递归算法?
[复制链接]
11
|
1
|
2007-12-15 12:55:06
|
显示全部楼层
|
阅读模式
#include "iostream.h"#include "stdlib.h"#include "stdio.h"typedef char ElemType;//定义二叉树结点值的类型为字符型const int MaxLength=10;//结点个数不超过10个typedef struct BTNode{ ElemType data; struct BTNode *lchild,*rchild;}BTNode,* BiTree;void CreateBiTree(BiTree &T){//按先序次序输入,构造二叉链表表示的二叉树T,空格表示空树// if(T) return; char ch; ch=getchar(); //不能用cin来输入,在cin中不能识别空格。 if(ch==' ') T=NULL; else{if(!(T=(BTNode *)malloc(sizeof(BTNode)))) coutdata=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }}void PreOrderTraverse(BiTree T){//先序遍历 if(T){coutdatalchild);PreOrderTraverse(T->rchild); }}void InOrderTraverse(BiTree T){//中序遍历 if(T){InOrderTraverse(T->lchild);coutdatarchild); }}void PostOrderTraverse(BiTree T){//后序遍历 if(T){PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);coutdatadatalchild){//左孩子不为空,入队 Q[rear]=p->lchild; rear=(rear+1)%MaxLength;}if(p->rchild){ //右孩子不为空,入队 Q[rear]=p->rchild; rear=(rear+1)%MaxLength;} }}//非递归的先序遍历算法void NRPreOrder(BiTree bt){ BiTree stack[MaxLength],p; int top; if (bt!=NULL){top=0;p=bt;while(p!=NULL||top>0){ while(p!=NULL) {
coutdata;
stack[top]=p;
top++;
p=p->lchild;
} if (top>0) {top--; p=stack[top]; p=p->rchild; }} }}//非递归的中序遍历算法void NRInOrder(BiTree bt){ BiTree stack[MaxLength],p; int top; if (bt!=NULL){top=0;p=bt;while(p!=NULL||top>0){ while(p!=NULL) {
stack[top]=p;
top++;
p=p->lchild;
} if (top>0) {top--; p=stack[top];coutdata; p=p->rchild; }} }}//非递归的后序遍历算法/*bt是要遍历树的根指针,后序遍历要求在遍历完左右子树后,再访问根。需要判断根结点的左右子树是否均遍历过。可采用标记法,结点入栈时,配一个标志tag一同入栈(1:遍历左子树前的现场保护,2:遍历右子树前的现场保护)。首先将bt和tag(为1)入栈,遍历左子树;返回后,修改栈顶tag为2,遍历右子树;最后访问根结点。*/typedef struct {
BiTree ptr;
int tag;}stacknode;void NRPostOrder(BiTree bt){
stacknode s[MaxLength],x;
BiTree p=bt; int top; if(bt!=NULL){
top=0;p=bt;
do
{
while (p!=NULL)
//遍历左子树
{
s[top].ptr = p;
s[top].tag = 1;
//标记为左子树
top++;
p=p->lchild;
}
while (top>0 && s[top-1].tag==2)
{
x = s[--top];
p = x.ptr;
coutdata; //tag为R,表示右子树访问完毕,故访问根结点
}
if (top>0)
{
s[top-1].tag =2;
//遍历右子树
p=s[top-1].ptr->rchild;
}
}while (top>0);}}//PostOrderUnrecint BTDepth(BiTree T){//求二叉树的深度 if(!T) return 0; else{int h1=BTDepth(T->lchild);int h2=BTDepth(T->rchild);if(h1>h2) return h1+1;else return h2+1; }}int Leaf(BiTree T){//求二叉树的叶子数 if(!T) return 0; else if(!T->lchild&&!T->rchild) return 1; else return(Leaf(T->lchild)+Leaf(T->rchild));}int NodeCount(BiTree T){//求二叉树的结点总数 if(!T) return 0; else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;}void main(){ BiTree T; T=NULL; int select; //cout>select;
switch(select){
case 0:return;
case 1:
cout<<"请按先序次序输入各结点的值,以空格表示空树(输入时可连续输入):"<<endl;
CreateBiTree(T);
break;
case 2:
if(!T) cout<<"未建立树,请先建树!";
else{
cout<<"\n先序遍历:\n";
PreOrderTraverse(T);
cout<<"\n中序遍历:\n";
InOrderTraverse(T);
cout<<"\n后序遍历:\n";
PostOrderTraverse(T);
}
break;
case 3:
cout<<"\n层序遍历:\n";
LevelOrderTraverse(T);
break;
case 4:
cout<<"二叉树的深度为:\n";
cout<<BTDepth(T);
break;
case 5:
cout<<"\n叶子节点数:\n";
cout<<Leaf(T);
break;
case 6:
cout<<"总节点数:\n";
cout<<NodeCount(T);
break;
case 7:
if(!T) cout<<"未建立树,请先建树!";
else{
cout<<"\n先序遍历:\n";
NRPreOrder(T);
cout<<"\n中序遍历:\n";
NRInOrder(T);
cout<<"\n后序遍历:\n";
NRPostOrder(T);
}
break;
default:
cout<<"请确认选择项:\n";
}//end switch }//end while }
回复
使用道具
举报
千问
|
2007-12-15 12:55:06
|
显示全部楼层
题目太多了吧……哥们,线索化的非递归就是用栈了。你南大的吗?
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行
1
车辆保养的问题
2
reconcile 在财务英语中是什么意思?
3
周长相等情况下:正方形和正五边形哪个面积最大?
4
男人的骨头为什么会比女人的重呢?
5
文件夹不见了,怎么办?
6
请问在哈尔滨哪里学财会好
7
您好,这是什么病??
8
学文科前途好还是理科?
9
我昨晚梦到放炮了,谁能帮我解释下?
10
PS是什么东西?PS能减肥吗?
11
办理异地存款用什么方法最省手续费呢?
12
我已经把2台电脑工作组设置一样了 怎么还是不能看见对方电脑
13
CAD绘图中如何扩大缩小标注的大小
14
如何清除病毒W32/LEGMIR.BC?
15
加密的文件找不到了,怎么办?
16
请问什么歌女生唱好唱又好听?
17
请问如何打开这种文件
18
请理财高手或银行专家帮忙回答
19
是高手的来!!!
20
魔兽世界里的坐骑可以交易吗?
21
ohms/sg 是什么
22
养老保险交纳的基数不一样怎么办
23
2005年高考北京各院校入取分数线
24
就几句话!!大家给来来!!
25
现在市场上卖的鸡爪或者是鸡腿为什么都又大肉又多,听说含有激素,经常吃对身体有没有害处?
26
突然停电导致browsevi.dll文件丢失?
27
魔兽世界
28
三星711N的接口问题
29
大熊猫什么时候能给台湾?
30
哪位师傅是用COREL做喷绘版面的
31
是用醋洗脸好还是用盐洗脸好?哪种方法好?
32
有人了解关于江苏那边婚姻方面的习俗吗
33
惠普854 三色墨盒 能打印多少张A4的彩色图片
34
吃一堑,长一智;吃百堑,悟一理
35
急...........事后吃了一颗后定诺,有进行房事,该怎么避孕?? 急...........
36
知道积分有什么用
37
手提电脑屏幕脏了如何清洁?
38
如何让CAD上的标注尺寸后显示单位,谢谢你们的回答,因为我是刚学CAD
39
开锁的最好办法,不想找开锁公司。
40
我以前提的问题能删掉吗?
41
如果我爱上自己的老大怎么办啊
42
网球王子声优歌
43
如何打开被更改的文件夹?
44
他们说得百度作弊,刷分是什么意思?
45
中信银行温州营业网点
46
有没有人知道巴菲特的几个经典投资案例
47
谁知道学习英语最快的一套训练系统
48
外来务工占内蒙古自治区总人口的比例
49
我上传了个网站,在有的机子上能看到,有的机子上就看不到,这些机子有些是局域网,有些不是,原因??????????
50
备份???
51
如果考不上好的高中,应该怎么办
52
有时候觉得生活很无聊!除了学习就学习!都不想学了怎么办~
53
急需历年六级全真题和答案
54
boot and select proper boot device lnser boot media in select是什么意思???
55
在我的微机启动有软驱寻道声,屏幕提示missing operating system着是什么故障呢?
56
我的电脑有了最大的病毒
57
电脑怎么会坏了?这是什么问题?
58
我的女朋友爱上了别的男人,现在不爱我了,可是她发现我对她太好了不想伤害我,,,我该怎么办
59
J-1交流学生申请签证豁免简单吗?
60
DNA是否唯一的遗传物质?
61
在泡泡堂段位游戏里怎么开设炸弹模式呀?
62
请问晚间睡觉时会不自觉的咬牙,特别是转身时较明显(睡中),有什么解决的良方没?
63
我女朋友的爸爸明天过生日 我应该送什么 100元以内
64
寝室里住了两个没教养的人,咋办
65
运动会方队怎么走
66
ami的BIOS更改启动设备顺序的选项在哪里?
67
怎样配备可在家中检测水中微量元素的设备?大概需要多少钱?
68
如何确定DNA一级结构的方向性?
69
怎么样辩别正规网站和黑网站?
70
签证结果
71
决定DNA双螺旋结构状态的因素如何?
72
求助!!!西联汇款
73
quicktime这软件干吗用的?
74
如果开庭时被告没来怎么办?
75
上网网页不播放flash怎么调整 ,谢了!
76
从北京化工大学到北京市安贞邮电局怎么坐公交车?到哪站下?
77
哭过眼肿怎么办?
78
如何发表贴子
79
我原来老是做梦梦到自己从地面往低于地面的地方掉(比如井),请问有知道这是什么意思的么?
80
决定DNA双螺旋结构状态的因素如何?
81
为什么我的cpu占用率总是百分百的?我cpu是P4.2.4G的.怎么解决?
82
衣服上粘上草莓汁(果汁)之后用什么方法能够洗得洁净如新?
83
为什么睡在沙发上,会腰疼了
84
打桌球时的一杆清台用英语怎么说?
85
为什么6680收到的彩信无法显示
86
我在沈阳!是名警察.想咨询适合考哪类学校的法硕在职研究生?
87
我的电脑总有病毒每次杀都显示删除成功,(我已装了正版瑞星)怎么回事???急急急急
88
技嘉865PE的主板能用赛扬四1.7处理器和GF2显卡吗?
89
各位请问河南洛阳有叫“X意市”的地方吗?那里环境怎么样?
90
怎样才能去掉讨厌的痘痕?
91
从哪几方面给广播体操评分
92
三星手机哪里出产的?
93
什么数码相机价廉物美??
94
吃药能治好近视眼吗?
95
北京肉鸽价格???急~~~~~
96
请问打滚子单机游戏在哪能下载?
97
正常的XP系统Program Files文件夹里有哪些文件夹
98
什么是端子
99
网速慢有哪些原因
100
韩语<爱上女主播>的歌词及读法