void AllPath(Bitree T, Stack &S)//输出二叉树上从根到所有叶子结点的路径
{
if(T)
{
Push(S,T->data);
if(!T->Left&&!T->Right)//如果左指针和右指针同时为空,才说明该节点为叶子节点
PrintStack(S);
else
{
AllPath(T->Left,S);
AllPath(T->Right,S);
}
Pop(S);
}
}
而树组成的二叉链表,只要节点的左指针为空,就说明该节点为叶子节点。其实右指针在实际的树中为其兄弟节点,已经为空了,如下图所示,红色为实际的树,蓝色为树转成的二叉链表。
void OutPath(Bitree T, Stack &S)//输出森林从根到所有叶子结点的路径
{
while(!T)
{//要输出从根到叶子节点的路径,实质上输出从根节点开始往左加上左子树根到叶子节点的路径。
Push(S,T->data);
if(!T->lchild)//
Printstack(S);
else
OutPath(T->lchild,S);
Pop(S);
T=T->rchild;//T一直往右走
}
}