求二叉链表树高度

非递归实现

基于层序遍历思想,使用队列操作结点,从根节点开始入队,出队后判断左右子树,如果当前结点有左右子树则将子树入队,并且判断是否访问到这一层最右端结点,层数加1.

void Height(BiTree T){
	BiTree Q[maxsize];	//创建一个队列存储二叉树类型结点
	int front =0 , rear = 0;	//初始化队列的队头与队尾
	int last=0, level=0;        //初始层数和末尾结点
	if(!T){
		return ;
	}
	BiTNode *p = T;    //设一个指针指向T进行操作
	Q[++rear] = p;     //当前结点入队
	while(rear!=front){    //队列非空状态
		p = Q[front++];    //出栈时,队头指针后移
		if(p->lchild){     
			Q[++rear] = p->lchild;    //子节点入队进行递归
		}
		if(p->rchild){
			Q[++rear] = p->rchild;
		}
		if(rear == last){        //判断是否访问过入栈的结点,是则表示该层遍历结束
			level++;	last = rear;
		}
	}
	return level;
}

递归实现:先分别递归计算左、右子树的高度,最后取最大值的层数加上根节点的层数为最终结果

	int Height(BiTree){
	    int left_Height, right_Height;
	    left_Height = Height(T->lchild);
	    right_Height = Height(T->rchild);
	    if(left_Height > right_Height){
	        return left_Height+1;		//加一个根节点
	    }else{
	    	return right_Height+1;
		}
    }    

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/111999860