作业帮 > 综合 > 作业

用C语言构造一棵线索二叉树,后序遍历线索二叉树如何遍历

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/11 22:00:32
用C语言构造一棵线索二叉树,后序遍历线索二叉树如何遍历
这是我编的,head是一个头结点;
void PostOrderTraverse(BiTree head)
{
BiTree tp;
tp=head->lchild;
while(tp!=head)
{
\x05 while(tp->ltag!=1&&tp!=head) tp=tp->lchild; //这里会出错?
\x05 while(tp->rtag!=1&&tp!=head) tp=tp->rchild;
\x05 if(tp!=NULL)
\x05 printf("%4c",tp->data);
\x05 tp=tp->rchild;
}
}
最后是无限循环输出
请问如何改?一定 要在线索二叉树上后序遍历哦
用C语言构造一棵线索二叉树,后序遍历线索二叉树如何遍历
把BitTree定义粘一下呗
再问: 是这个吗? typedef struct Node { char data; struct Node *lchild,*rchild; int ltag,rtag; }Node,*BiTree; 十分感谢 等你解答
再答: 我不知道在定义时,ltag,rtag的作用是什么。个人猜测可能是作为本节点的左、右节点是否存在的一个标志。如果猜测是正确的,且1代表有节点。那么按while(tp->ltag!=1&&tp!=head) tp=tp->lchild;从左节点开始找起,直到当前节点没有左节点止。(但这并不意味着这个节点的下一个节点就没有左节点了)while(tp->rtag!=1&&tp!=head) tp=tp->rchild;现在我们找到一个节点,这个节点没有右节点,但可能有左节点,也可能没有下级节点了。如果该节点有效,输出该节点的内容。然后指向该节点的右节点。而当前节点的右节点是未知或是空的(while(tp->rtag!=1&&tp!=head) tp=tp->rchild保证了这一点),所以最后的这句 tp=tp->rchild;是有问题的。没有写东西测试,光分析是这样的。实践下最好。 另外:在Node定义时可能有点冗余。如果你只是想达到这样的目的:有个东东,它要保存一个内容,它可能有一个左节点,可能有一个右节点。那么定义时这样子就行了: typedef struct Node { char data; struct Node *lchild,*rchild; }Node,*BiTree;只需要判断lchild和rchild是否null就可以了。当然为避免lchild和rchild出未知错误,可能的话,在赋值时先把这2个明确的赋值为null。 何不参考一下这个:http://baike.baidu.com/link?url=OqOzcKBka1c5lcGd0Z0NwmUBENpiEknZNAU2QxZECWzNH2I7mtZ_w6ittZ4ay7uZImXXd9wPMNYHbjK_FzyvW_