求树的值为x的结点的深度
求树中的元素值为elem的节点的深度(假设树中元素各不相同)
算法思想:采用递归算法,每调用一次递归函数,使level++,设置判定条件,当(T->data==x),将level值赋给depth。
1.二叉链表表示树
void Depth_Elem(BiTree T,int level,int *depth,ElemType elem){
if(T!=NULL){
level++;
if(T->data==x) depth = level;//判定条件
}
Depth_Elem(T->lchild,level,depth,x);//对左子树进行递归调用
Depth_Elem(T->rchild,level,depth,x);//对右子树进行递归调用
}
- 兄弟孩子表示法
void Depth_Elem(CSTree T,int level,int *depth,ElemType elem){
if(T!=NULL){
level++;
if(T->data==x) depth = level;
}
Depth_Elem(T->firstchild,level,depth,x);
Depth_Elem(T->nextsibling,level-1,depth,x);//在对兄弟结点进行调用时,由于先前对level进行了+1处理,而兄弟结点与原结点位于同一层,故应进行-1操作进行递归调用。
}
(本质思想是一样的,只是在递归调用是对level处理不同)