大哥哥,请帮帮小妹妹注释几行代码吧,要考试了。

来源:百度知道 编辑:UC知道 时间:2024/05/16 19:54:15
BinTree CreatBinTree(BinTree T)
{
//ABD###CE##F##
char ch;
ch=getchar();
if(ch=='#')
T=NULL;
else
{
if(!(T=(BinTNode *)malloc(sizeof(BinTNode))))
printf("Error!");
T->data=ch;
T->lchild=CreatBinTree(T->lchild);
T->rchild=CreatBinTree(T->rchild);
}
return T;
}

//二叉树输入这个:ABD###CE##F##
这段代码应该怎么理解?我想很久想不明白这递归该怎么理解。
呜呜。

若程序输入:“ABD###CE##F##”则建立了一颗如下图所示结构的二叉树:
A
/ \
B C
/ \ / \
D # E F
/ \ / \ / \
# # # # # #

递归是把一个大的复杂的问题划分成小的相同的问题来解决的一种思路。

在这里是把建立一棵二叉树的问题,分解成下列三步:
1.建立这棵二叉树的根节点
2.建立这棵二叉树的左二叉子树
3.建立这棵二叉树的右二叉子树
而其中的2和3两步又是一个建立一棵二叉树的问题。又可以划分成以上的三步。

这样的划分并不是无休止的,要不程序就一直递归下去了。所以在某种条件下(一般是问题已经到了不需要再划分的时候),递归需要返回结果。
在这个问题中,如果建立的二叉树根节点为空时,就不需要再建立这棵树的左子二叉树和右子二叉树了。

下面说一说代码:
BinTree CreatBinTree(BinTree T)
{
char ch;
ch=getchar(); //输入一个字符放到字符变量ch中
if(ch=='#') //输入的字符是"#","#"在这里应该是表示空树节点的意思
T=NULL; //该二叉树是一棵空树
else //该二叉树不是空二叉树
{
if(!(T=(BinTNode *)malloc(sizeof(BinTNode)))) //分配二叉树节点
printf("Error!");
T->data=ch; //节点的数据域赋值为ch
T->lchild=CreatBinTree(T->lchild); //创建该节点的左二叉子树
T->rchild=Cr