数据结构:二叉树基础项目,算法设计题

假设二叉树中的每个结点的值均为整数,采用二叉链存储结构进行存储。设计一个算法,输出从根节点到每个叶子结点的路径中路径和恰好为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;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img