假设二叉树中的每个结点的值均为整数,采用二叉链存储结构进行存储。设计一个算法,输出从根节点到每个叶子结点的路径中路径和恰好为sum的所有路径。用数据进行测试。要求使用C语言。
1条回答 默认 最新
- 天际的海浪 2022-06-15 02:38关注
你题目的解答代码如下:
#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; }
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用