二叉树习题整理(一)

题目一

编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值

思想

声明一个order用来计数,先序遍历,每遍历一个结点order+1,然后判断k是否等于order,等于则将结点的值域赋给e

代码

Status T641(BiTree T,TElemType *e, int *order,int k)
{
	if(T)
	{
		(*order)++;
		if(*order==k)
		{
			*e=T->data;
			return OK;
		}
		else
		{
			if(T641(T->lchild,e,order,k))
				return OK;
			if(T641(T->rchild,e,order,k))
				return OK;
		}
	}
	return ERROR;
}

题目二

编写递归算法,计算二叉树中叶子结点的数目

思想

叶子结点的特点是没有子结点,可以遍历二叉树然后每个结点判断是否满足条件,满足则加一;这个代码段是先序递归。

代码

Status T642(BiTree T)
{
	int count=0;
	if(T)
	{
		if(T->lchild==NULL&&T->rchild==NULL)
			count++;
		else
		{
			count+=T642(T->lchild);
			count+=T642(T->rchild);
		}
	}
	return count;
}

题目三

编写递归算法,将二叉树中所有结点的左右子树相互交换

思想

代码非常简单,不做过多解释

代码

void T643(BiTree T)
{
	BiTree p;
	if(T)
	{
		p=T->lchild;
		T->lchild=T->rchild;
		T->rchild=p;
		T643(T->lchild);
		T643(T->rchild);
	}
	
发布了73 篇原创文章 · 获赞 20 · 访问量 4474

猜你喜欢

转载自blog.csdn.net/lzl980111/article/details/103017208