假设二叉树中的每个结点的值均为整数,采用二叉链存储结构进行存储。设计一个算法,输出从根节点到每个叶子结点的路径中路径和恰好为sum的所有路径。用数据进行测试。要求使用C语言。
你题目的解答代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct BiTnode
{
Elemtype data; //数据域
struct BiTnode *Lchild, *Rchild; //左右子树域;
} BiTnode, *BiTree;
int sum, num = 0, len = 0;
int gd[100] = {0};
int create(BiTree *T)
{
Elemtype ch;
Elemtype temp;
scanf("%d", &ch);
temp = getchar();
if (ch == -1)
{
*T = NULL;
}
else
{
*T = (BiTree)malloc(sizeof(BiTnode));
if (!(*T))
{
exit(-1);
}
else
{
(*T)->data = ch;
printf("请输入%d的左节点的值", ch);
create(&(*T)->Lchild);
printf("请输入%d的右节点的值", ch);
create(&(*T)->Rchild);
}
}
return 1;
}
void Traverse(BiTree T) //前序遍历二叉树
{
gd[len++] = T->data;
num += T->data;
if (T->Lchild == NULL && T->Rchild == NULL)
{
if (num == sum)
{
for (int i = 0; i < len; i++)
{
if (i > 0)
printf(" -> ");
printf("%d", gd[i]);
}
printf("\n");
}
}
if (T->Lchild != NULL)
Traverse(T->Lchild);
if (T->Rchild != NULL)
Traverse(T->Rchild);
num -= T->data;
len--;
}
int main()
{
BiTree T;
BiTree *p = (BiTree *)malloc(sizeof(BiTree));
printf("请输入第一个节点的值,-1代表没有叶节点:\n");
create(&T);
printf("请输入sum:");
scanf("%d", &sum);
Traverse(T);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!