前篇:
第一章代码题_永无魇足的博客-CSDN博客
第二章代码题(一)_永无魇足的博客-CSDN博客
第二章代码题(二)_永无魇足的博客-CSDN博客
第二章代码题(三)_永无魇足的博客-CSDN博客
第三章代码题(一)_永无魇足的博客-CSDN博客
第三章代码题(一)_永无魇足的博客-CSDN博客
第六章代码题(一)_永无魇足的博客-CSDN博客
第六章代码题(二)_永无魇足的博客-CSDN博客
6.二叉链表存储的二叉树中,输出从根节点到每个叶子结点的路径。
可以创建一个数组,如果不是叶子结点那么就将结点的值存进数组内,当找到叶子结点时将当前数组的元素全部进行输出。此外,需要一个索引永远指向数组插入元素的位置。这个索引极其重要,它除了向数组中插入元素外,遍历也靠它输出,其次递归中显示其他叶子结点的路径也靠它覆盖相应位置的元素。
代码:
//第六题 找从根结点到每个叶子结点的路径
void FindPath(BiTree btree,ElemType a[],int length ) {
if (btree==NULL)
{
return;
}
if (btree->Lchild==NULL&&btree->Rchild==NULL)
{
printf("\n%d的路径为:", btree->data);
for (int i = 0; i < length; i++)
{
printf("%d,", a[i]);
}
}
else
{
a[length++] = btree->data;
FindPath(btree->Lchild, a, length);
FindPath(btree->Rchild, a, length);
}
}
验证:
int main() {
BiTree btree = (BiTree)malloc(sizeof(BiTnode));
InitTree(&btree);
srand(time(NULL));
for (int i = 0; i < MaxSize; i++)
{
btree=AddNode(btree, rand()%100+1);
}
printf("\n中序遍历\n");
MiddleTraversal(btree);
printf("\n前序遍历\n");
BeforeTraversal(btree);
int a[10] = { 0 };
int length = 0;
FindPath(btree, a, length);
return 0;
}
执行结果:
画出二叉树:
7.二元数组,按先序次序输出各结点的内容及相应的层次数。
这道题也是在函数里面对数组赋值,输出的形式是一个结点的值,和该结点所在的层数。那么直接将二元数组的列数定为2,行数和二叉树的结点数一样多(二叉树的结点数一直是用宏定义来操控的,所以直接设置为MAXSIZE即可)。
先序决定代码的顺序,那么就是中左右,先进行赋值,然后进行递归。
函数的参数除了二叉树和二元数组外,还有一个整数k,用来确定结点的层数。这里的思路和第六题有点相像,也从侧面体现了递归的特点;同一层数的结点的k的值不会受到影响,即各干各的。
第六题是直接将数组对应位置的元素覆盖了,很明显这道题得保证对应位置的元素,所以就要靠全局变量的特点,即便是递归,插入元素的位置的索引也一直在往前移动。
代码:
int i = 0;
//第七题 二元组输出先序次序的各结点的内容及相应的层次数。
void TreeLevel(int a[MaxSize][2], BiTree btree,int k) {
if (btree==NULL)
{
return;
}
a[i][0] = btree->data;
a[i++][1] = k++;
TreeLevel(a,btree->Lchild,k);
TreeLevel(a, btree->Rchild,k);
}
验证:
int main() {
BiTree btree = (BiTree)malloc(sizeof(BiTnode));
InitTree(&btree);
srand(time(NULL));
for (int i = 0; i < MaxSize; i++)
{
btree=AddNode(btree, rand()%100+1);
}
printf("\n中序遍历\n");
MiddleTraversal(btree);
printf("\n前序遍历\n");
BeforeTraversal(btree);
//第七题
int b[MaxSize][2];
TreeLevel(b, btree,1);
printf("\n");
for (int i = 0; i < MaxSize; i++)
{
printf("{");
printf("%d,", b[i][0]);
printf("%d", b[i][1]);
printf("}");
}
return 0;
}
执行结果:
按照先序次序的要求直接从结果就能看出来是正确的,将二叉树画出来验证对应的层数是否正确:文章来源:https://www.toymoban.com/news/detail-628984.html
文章来源地址https://www.toymoban.com/news/detail-628984.html
到了这里,关于第六章代码题(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!