二叉树习题整理(二)

题目一

编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度

思想

先递归找出x的位置,用p指向,然后找到子树的深度(求树的深度的思路:
1、如果树为空,则深度为0
2、如果树不是空,那么深度是左子树的深度+1或右子树的深度+1)

代码

int T644(BiTree *T,TElemType x)
{
	BiTree p;
	p=locationBiTree(T,x);	//第一个递归找出x的位置,用p指向
	return BiTreedepth(p);	//返回p的深度
}
BiTree locationBiTree(BiTree *T,TElemType x){
	if(T){
		if(T->data==x){
			return T;
		}
		else{
			locationBiTree(T->lchild,x);
			locationBiTree(T->rchild,x);
		}
	}
	return NULL;
}
int BiTreedepth(BiTree p){
	int n1,n2;
	if(p==NULL)
		return 0;
	else{
		n1=BiTreedepth(p->lchild);
		n2=BiTreedepth(p->rchild);
		if(n1>n2)
			return n1+1;
		else
			return n2+1;
	}
}

题目二

对于二叉树中每一个元素值为x的结点,删除以它为跟的子树,并释放相应的空间

思路

代码

void T645(BiTree *T,ElemType x)
{
	if(*T)
	{
		if((*T)->data=x)
			ClearBiTree(T);
		else
		{
			T645(&(*T)->lchild,x);
			T645(&(*T)->rchild,x);
		}
	}
}	

题目三

层次顺序遍历二叉树

思想

首先根结点入队,然后循环,有左节点则左节点入队,有右节点则右节点入队;j标识队列,i标识循环次数

代码

void T647(BiTree T)
{
	int i,j;
	BiTree p[100];			//数组模拟队列
	i=j=0;
	if(T)
	 	p[j++]=T;			//根结点入队
	 while(i<j)
	 {
	 	printf("%c",p[i]->data);
	 	if(p[i]->lchild)
	 		p[j++]=p[i]->lchild;		//左节点入队
	 	if(p[i]->rchild)
	 		p[j++]=p[i]->rchild;		//右节点入队
	 		i++;
	 }
}
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值