求树的某一结点的深度

求树的值为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);//对右子树进行递归调用
}
  1. 兄弟孩子表示法
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处理不同)


版权声明:本文为Leemars1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。