二叉树习题整理(二)

题目一

编写递归算法,求二叉树中以元素值为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)非递归定义 树(tree)是由n(n≥0)个结点组成的有限集合。n=0的树称为空树;n>0的树T: ① 有且仅有一个结点n0,它没有前驱结点,只有后继结点。n0称作树的根(root)结点。 ② 除结点外n0 , 其余的每一个结点都有且仅有一个直接前驱结点;有零个或多个直接后继结点。 (2)递归定义 一颗大树分成几个大的分枝,每个大分枝再分成几个小分枝,小分枝再分成更小的分枝,… ,每个分枝也都是一颗树,由此我们可以给出树的递归定义。 树(tree)是由n(n≥0)个结点组成的有限集合。n=0的树称为空树;n>0的树T: ① 有且仅有一个结点n0,它没有前驱结点,只有后继结点。n0称作树的根(root)结点。 ② 除根结点之外的其他结点分为m(m≥0)个互不相交的集合T0,T1,…,Tm-1,其中每个集合Ti(0≤i<m)本身又是一棵树,称为根子树(subtree)。 2、掌握树的各种术语: (1) 父母、孩子与兄弟结点 (2) 度 (3) 结点层次、树的高度 (4) 边、路径 (5) 无序树、有序树 (6) 森林 3、二叉树的定义 二叉树(binary tree)是由n(n≥0)个结点组成的有限集合,此集合或者为空,或者由一个根结点加上两棵分别称为左、右子树的,互不相交的二叉树组成。 二叉树可以为空集,因此根可以有空的左子树或者右子树,亦或者左、右子树皆为空。 4、掌握二叉树的五个性质 5、二叉树叉链表存储。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值