二叉树建立停止的控制
(高手如发现有错误,请不吝赐教)
二叉树的建立时,写结束符不知大家清不清楚,总是不知该怎么停止建树为什么输入自己规定的结束符时不会停止呢?而总是输入几个结束符才会停止。下面以这段程序为例:
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void CreateBiTree(BiTree *bt)
{
char ch;
ch = getchar();
if (ch=='#')
*bt = NULL;
else
{
if (!(*bt = (BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
(*bt)->data = ch;
CreateBiTree(&(*bt)->lchild);
CreateBiTree(&(*bt)->rchild);
}
}
我们可以输入:qwe####可以使建树停止,但是为什么要输入四个呢?请大家回忆一下建树的过程,如果这样输入是一直在建立左侧的子树,一共三层,,w作为q的左子树,根结点q和第二个结点w都有一个空的右子树,需要输入两个##,最后一个结点e,左右子树都为空所以需要再输入两个##。一共四个####,实现了建树的停止。
我们还可以输入as##c##,这样又是如何呢?as跟上面一样也是建立在左侧子树上,到这时输入两个##说明a结点的右子树为空,s结点的左子树为空,然后输入c,c作为s的右子树,最后输入两个##说明c的左右子树都为空建树停止!
总之我们是遵循的先建左子树的规则!
希望能解决您的问题。