标题:简单计算二叉树各结点data的和
取消只看楼主
三尺冰
Rank: 2
等 级:论坛游民
帖 子:17
专家分:50
注 册:2019-10-22
结帖率:66.67%
已结贴  问题点数:20 回复次数:1 
简单计算二叉树各结点data的和
程序代码:
#include<stdio.h>
#include<stdlib.h>

/**
*简单地创建一棵树
*三个函数: 1.先序遍历创建树,-1作为空指针标志
*      2.输出先序遍历序列
*      3.计算所有结点data域的和
*在main函数中声明指向根结点的指针变量
*并输出和sum
*/

typedef struct tree
{
    int data;
    struct tree *lchild, *rchild;
}Tree;      //结构体声明
   

int main()
{

    void createTree(Tree *t);
    int calSum(Tree *t);
    void dispTree(Tree *t);     //函数声明

    Tree *t;       

   

    int sum;
    createTree(t);
    sum = calSum(t);
    dispTree(t);       

    printf("%d\n", sum);    //创建、计算sum、输出先序序列和输出sum

    return 0;
}

void createTree(Tree *t)
{
    int x;
    scanf("%d", &x);
    if(x == -1)
        t = NULL;
    t = (Tree *)malloc(sizeof(Tree));
    t->data = x;
    createTree(t->lchild);
    createTree(t->rchild);
}

int calSum(Tree *t)
{
    if(!t)  return 0;
    return calSum(t->lchild) + calSum(t->rchild) + t->data;
}

void dispTree(Tree *t)
{
    if(t)
    {
        printf("%d  ", t->data);
        dispTree(t->lchild);
        dispTree(t->rchild);
    }
}

问题在于数据输入结束后无响应
测试数据:2 3 -1 6 -1 -1 9 -1 -1
数据输完不会结束,输入非数字数据,程序崩溃。
递归用的可能不熟,诚心请教!
搜索更多相关主题的帖子: data tree int 结点 sum 
2019-11-11 23:47
三尺冰
Rank: 2
等 级:论坛游民
帖 子:17
专家分:50
注 册:2019-10-22
得分:0 
CreateTree函数是递归进行的,每次递归也只是用实参的副本,为什么还是要
使用t的二级指针呢?


天道酬勤,自强不息
2019-11-15 12:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497749-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.501991 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved