谁能帮我把这个程序注释一下,越详细越好,谢谢了,我重重有赏

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef char datatype ;
typedef struct node
{
datatype data;
struct node *lchild,*rchild;
}treenode;

typedef treenode *BiTree;

typedef struct stack
{
BiTree data[MAXSIZE];
int tag[MAXSIZE];
int top;
}seqstack;

BiTree pop(seqstack *s)
{
if(s->top!=0)
{
s->top--;
return s->data[s->top];
}
else return NULL;
}
void push(BiTree t,seqstack *s)
{
s->data[s->top]=t;s->top++;
}

void creatree(BiTree &T)
{
char ch;
ch=getchar();
if(ch=='#') T=NULL;
else
{
T=(BiTree)malloc(sizeof(treenode));
T->data=ch;
creatree(T->lchild);
creatree(T->rchild);
}
}

void preorder(BiTree T)
{
if(T)
{
printf("%c",T->data);
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BiTree T)
{
if(T)
{
inorder(T->lchild);
printf("%c",T->data);
inorder(T->rchild);
}
}

int find(BiTree T,BiTree x,seqstack *s)
{

s->top=0;
while(T||s->top)
{

if(T)
{
s->tag[s->top]=0;
push(T,s);
T=T->lchild;
}
else
{
if(s->top&&s->tag[s->top-1])
{
T=pop(s);
if(T&&T->data==x->data)
return s->top;
T=NULL;

}
else
{
T=s->data[s->top-1];
s->tag[s->top-1]=1;
T=T->rchild;
}

}

}

return -1;
}

void grandpar(seqstack *sq,seqstack *sp)
{
while(sq->top!=sp->top)
{
if((sq->top-1)>(sp->top-1))
{
pop(sq);
}
else
{
pop(sp);
}
}
while(sp->top)
{
if(sq->data[sq->top-1]==sp->data[sp->top-1])
{
printf("%4c",sq->data[sq->top-1]->data);
}
pop(sq);
pop(sp);
}
}

main()
{
BiTree root,p,q;
seqstack *sp,*sq;
int x,y;
root=(BiTree)malloc(sizeof(treenode));
p=(BiTree)malloc(sizeof(treenode));
q=(BiTree)malloc(sizeof(treenode));
sq=(seqstack *)malloc(sizeof(seqstack));
sp=(seqstack *)malloc(sizeof(seqstack));
printf("请用前序遍历创建一棵二叉树:");
creatree(root);
printf("该二叉树为");
preorder(root);
printf("\n请输入要查找共同祖先的两个结点:");
getchar();

scanf("%c%c",&p->data,&q->data);

x=find(root,p,sp);
y=find(root,q,sq);
printf("这两个结点的共同祖先为");
grandpar(sq,sp);
}

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

// 树结构定义
typedef char datatype ;
typedef struct node {
datatype data;
struct node *lchild, *rchild;
} treenode;

typedef treenode *BiTree;

// 栈
typedef struct stack {
BiTree data[MAXSIZE];
int tag[MAXSIZE];
int top;
} seqstack;

// 出栈操作
BiTree pop (seqstack *s)
{
// 若栈顶不为空
if (s->top != 0) {
// 减一个
s->top--;
// 返回减掉的data
return s->data[s->top];
} else return NULL;
// 否则返回空
}
// 入栈操作
void push (BiTree t, seqstack *s)
{
// 把t放上栈顶
s->data[s->top] = t;
// 栈顶递增
s->top++;
}

// 生成树
void creatree (BiTree &T)
{
char ch;
// 读取字符
ch = getchar();
// 输入#结束输入
if (ch == '#') T = NULL;
// 录入
else {
// 分配
T = (BiTree) malloc (sizeof (treenode));
// 放入data
T->data = ch;
// 继续二叉
creatree (T->lchild);
creatree (T->rchild);
}
}

// 前序遍历
void preorder (BiTree T)
{
if (T) {
// 前序、中序的区别自个弄清概念
printf ("%c", T->data);
preorder (T->lchild);
preorder (T->rchild);
}
}
// 中序遍历
void inorder (BiTree T)
{
if (T) {
// 顺藤摸瓜
inorder (T->lchild);
printf ("%c", T->data);
inorder (T->rchild);
}
}

// 查找树
int find (BiTree T, BiTree x, seqstack *s)
{
// 栈顶复0
s->top = 0;
// 若T不为空
while (T || s->top) {
// 能进来当然不空
if (T) {
s->tag[s->top] = 0;
push (T, s);
T = T->lchild;
// 这函数似乎乱七八糟的,这程序是谁写的,你读别人的吗,这是个正常的程序吗
} else {
if (s->top && s->tag[s->top-1]) {
T = pop (s);
if (T && T->data == x->data)
return s->top;
T = NULL;

} else {
T = s->data[s->top-1];
s->tag[s->top-1] = 1;
T = T->rchild;
}

}

}

return -1;
}

// 查找共同祖先
void grandpar (seqstack *sq, seqstack *sp)
{
// 先把栈顶砍平
while (sq->top != sp->top) {
if ( (sq->top - 1) > (sp->top - 1)) {
pop (sq);
} else {
pop (sp);
}
}
// 平了开始比较对应元素
while (sp->top) {
if (sq->data[sq->top-1] == sp->data[sp->top-1]) {
// 若找到相同的就打印
printf ("%4c", sq->data[sq->top-1]->data);
}
pop (sq);
pop (sp);
}
}

int main()
{
BiTree root, p, q;
seqstack *sp, *sq;
int x, y;
root = (BiTree) malloc (sizeof (treenode));
p = (BiTree) malloc (sizeof (treenode));
q = (BiTree) malloc (sizeof (treenode));
sq = (seqstack *) malloc (sizeof (seqstack));
sp = (seqstack *) malloc (sizeof (seqstack));
printf ("请用前序遍历创建一棵二叉树:");
creatree (root);
printf ("该二叉树为");
preorder (root);
printf ("\n请输入要查找共同祖先的两个结点:");
getchar();

scanf ("%c%c", &p->data, &q->data);

x = find (root, p, sp);
y = find (root, q, sq);
printf ("这两个结点的共同祖先为");
grandpar (sq, sp);
}追问

废话,当然不是我写的啦,要是我写的怎么可能不会注释,不过看你给我回答了,就当做采纳了

温馨提示:内容为网友见解,仅供参考
无其他回答

谁能帮我把涂鸦下面的数字说出来,重重有赏!
实验室的水龙头放出来的水会变成红色 还有1楼尽头的那个厕所只要有人进去了就再也出不来了 于是 一群不信邪的孩子们约好15那天去探险 晚上12点 他们准时来到了那所学校的门口 鲁迅像的眼睛望着左边 他们记下了 生怕出来的时候记不得有没有动过 他们来到了教室 打开开关 咦 不是亮着的么?“骗...

谁能帮我把这对联翻译出来,重重有赏!急急急急急急!!!
你好!你的问题回答如下:第一幅对联内容为:清越而瑕不自掩,洁白而物莫能污。(出自唐代.刘禹锡的《明贽论》)第二幅对联内容为:竹死不变节,花落有馀香。 (出自唐代.邵谒的《金谷园怀古》)希望你能满意,祝你事事顺心!

帮我翻译一下这样。 要无烦恼要无愁,本分随缘莫强求。 无益语言休出口...
急躁地裁断事理是不妥的。智者应该同时 明察正确与错误两方面。积德虽无人见,存心自有天知。浮生若梦谁非寄,到处能安既是家。放下过去的烦恼,不耽忧未来,不执著现在,你的内心就会平静。聪明的人不奢望未来,也不追悔过去。处世让一步为高,退步即进步的张本,待人宽一分是福,利人实利己的根基。...

帮忙把秦观《踏莎行》赏析一下?
【砌成此恨无重数】一个“砌”字,将那无形的伤感形象化(即将无形变为有形),好像还可以重重累积,终如砖石垒墙般筑起一道高无重数、沉重坚实的“恨”墙。【可堪孤馆闭春寒,杜鹃声里斜阳暮】春寒料峭时节,独处客馆,念往事烟霭纷纷,瞻前景不寒而栗。一个“闭”字,锁住了料峭春寒中的馆门...

求数学大神来帮我解一下这个贝塞尔函数,急用,重重有赏
169=1*16=4*4

喜羊羊与灰太狼之牛气冲天的故事谁能基本帮罔我讲一下。。。拜托了我...
而熟悉的声音回到大家身边:“灰太狼,这可是你发明的控制器哦。”此刻喜羊羊正用控制器控制红太狼殴打灰太狼。原来喜羊羊再次被蜗牛排出体外并捡得灰太狼的放大丸成功脱险!随后喜羊羊饶恕了灰太狼一家的行为并用大炮把他们发射上了天。当然最后又是灰太狼说:可恶的喜羊羊,我一定会回来的!

谁能教我把这个网页(尤其文字)复制下来,重重有赏
金秋十月,谢老师与学生经过一个多月实验的新课题《生长素的生理作用》获得全省生物年会优质课竞赛二等奖,并得到省教研员董仲文老师的肯定!冬意绵绵的十二月,从省电教馆再次传来喜讯,我校年轻教师谢佳荣获“湖南省2008年信息技术与课程整合三优联评活动”教学课件一等奖、教学设计一等奖、教学课例一等奖...

介绍一下电影<三岔口>的剧情.越详细越好
剧情介绍:一个被押解回港的洗黑钱分子甫刚下飞机便遭杀害,行凶的职业杀手曲逃去无踪。买凶杀人的洗钱集团主脑饶天颂眼看被冻结的资产即将解冻,可是,独生子饶夏却神秘被掳失踪。负责解犯的警员孙是个倒霉专家,他钟爱的女友素芳人间蒸发,生死不明,令他一直不能释怀。 在调查过程中,他发现洗钱集团...

人教版小学语文1至6年级的课文填空。重重有赏!回答一个年级的10分,两...
16、鸟无翅膀不能飞,人无志气无作为。人贵有志,学贵有恒。懦夫在他真正断气以前,已经死过好多次了。少壮不努力,老大徒伤悲。欲求生富贵,须下死功夫,一个人追求的目标越高,他的才能就发展得越快,对社会就越有益。 17、《孔子游春》是一篇游记(体裁),它生动地描述了孔子带弟子到泗水河畔游赏,巧借河水诱导...

谁帮我做这个数学难题,重重有赏!先给50,后给200.
2的三次方)---(2N+1 ,2的M)--(2de M , 2N +1)3 (1,1)--(1,2)--(1,4)--(1,8)--(1,9)--(1,10)--(10,1)--(10,11)-(11,10)--(11,21)--(11,23)---(11,2012)--(2012,11) 2012 = 11*182 +10 ...

相似回答