西南交通大学计算机专业考研真题答案详解5:2013年算法设计题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/83592583

一、考研真题

3、设有若干正整数的随机输入序列,写出一个算法,建立带头结点的值升序排列的链表(输入-1时停止输入),该链表结构如图所示。

4、有一个用二叉链表表示的二叉树btree,结点结构为(lchild,data,rchild),设计分别实现如下操作的递归算法:

(1)计算二叉树的深度;

(2)计算二叉树中度为0的结点数目。

二、真题解析

3、设有若干正整数的随机输入序列,写出一个算法,建立带头结点的值升序排列的链表(输入-1时停止输入),该链表结构如图所示。

//2013年第一题
LNode* CreateLink()
{
	LNode* L;
	//创建头结点
	L = (LNode*)malloc(sizeof(LNode));
	L->next = NULL;

	LNode* prior;
	int m_ch;
	cin >> m_ch;
	while (m_ch != -1)
	{
		LNode* pcur = (LNode*)malloc(sizeof(LNode));
		pcur->data = m_ch;
		//从表头查找第一个比当前结点大的结点
		prior = L;
		while (prior->next != NULL&&prior->next->data<pcur->data)
		{
			prior = prior->next;
		}
		//插入创建的结点
		pcur->next = prior->next;
		prior->next = pcur;
		//输入下一个元素值
		cin >> m_ch;

	}
	return L;
}

4、有一个用二叉链表表示的二叉树btree,结点结构为(lchild,data,rchild),设计分别实现如下操作的递归算法:

(1)计算二叉树的深度;

int Heigh(BTNode* btree)
{
	if (btree == NULL)
	{
		return 0;
	}
	int lheight, rheight;
	lheight = Heigh(btree->lchild);
	rheight = Heigh(btree->rchild);
	if (lheight>rheight)
	{
		return lheight + 1;
	}
	else {
		return rheight + 1;
	}
}

(2)计算二叉树中度为0的结点数目。

int LeafNum(BTNode* bt)
{
	if (bt==NULL)
	{
		return 0;
	}
	if (bt->lchild==NULL&&bt->rchild==NULL)
	{
		return 1;
	}
	int num = LeafNum(bt->lchild) + LeafNum(bt->rchild);
	return num;
}

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/83592583