版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}