树遍历算法的应用
1、求树的深度的算法:
int TreeDepth(CSTree T) {
if(!T) return 0;
else {
h1 = TreeDepth( T->firstchild );
h2 = TreeDepth( T->nextsibling);
return(max(h1+1, h2));
}
} // TreeDepth
2、输出树中所有从根到叶子的路径的算法:
void AllPath( Bitree T, Stack& S ) {
// <1> 输出二叉树中所有从根到叶子的路径
if (T) {
Push( S, T->data );
if (!T->lchild && !T->rchild ) PrintStack(S);
else {
AllPath( T-> lchild, S );
AllPath( T-> rchild, S );
}
Pop(S);
}
} // AllPath
void OutPath( Bitree T, Stack& S ) {
// <2> 输出树中所有从根到叶子的路径
while ( !T ) {
Push(s, T->data );
if ( !T->firstchild ) Printstack(s);
else OutPath( T->firstchild, s );
Pop(s);
T = T->nextsibling;
} // while
} // OutPath
1、求树的深度的算法:
int TreeDepth(CSTree T) {
if(!T) return 0;
else {
h1 = TreeDepth( T->firstchild );
h2 = TreeDepth( T->nextsibling);
return(max(h1+1, h2));
}
} // TreeDepth
2、输出树中所有从根到叶子的路径的算法:
void AllPath( Bitree T, Stack& S ) {
// <1> 输出二叉树中所有从根到叶子的路径
if (T) {
Push( S, T->data );
if (!T->lchild && !T->rchild ) PrintStack(S);
else {
AllPath( T-> lchild, S );
AllPath( T-> rchild, S );
}
Pop(S);
}
} // AllPath
void OutPath( Bitree T, Stack& S ) {
// <2> 输出树中所有从根到叶子的路径
while ( !T ) {
Push(s, T->data );
if ( !T->firstchild ) Printstack(s);
else OutPath( T->firstchild, s );
Pop(s);
T = T->nextsibling;
} // while
} // OutPath