idiocydisaster 2023-04-16 23:13 采纳率: 100%
浏览 20
已结题

创建二叉树的函数 赋值失败

创建二叉树的函数 赋值失败

#include<iostream>
//#include<cstdlib>
using namespace std;

typedef struct BiNode
{
    char val;
    BiNode* lchild, * rchild;
}BiNode;

BiNode* BuildBiTree(BiNode* &t)
//先序遍历创建二叉树
{
    char ch;
    cin >> ch;
    if (ch == '@') return nullptr;
    //空节点输入@
    else
    {
        BiNode* T = t;
        T = new BiNode;
        T->val = ch;
        BuildBiTree(T->lchild);
        BuildBiTree(T->rchild);
    }
}

int NodeNumber(BiNode* T)
//统计二叉树节点个数
{
    if (T == nullptr) 
        return 0;
    else 
        return NodeNumber(T->lchild) + NodeNumber(T->rchild) + 1;
}

int main()
{
    BiNode* T = nullptr;
    BuildBiTree(T);
    cout << NodeNumber(T) << endl;
    return 0;
}

创建二叉树abc@@@d@@ //空节点用@表示
统计的节点数却为0

img

  • 写回答

3条回答 默认 最新

  • 语言-逆行者 2023-04-16 23:54
    关注

    你遇到的问题是在 BuildBiTree 函数中赋值失败。一个可能的原因是 t 参数被传递给函数的引用,但它没有被分配给新创建的节点。下面是一个修改过的 BuildBiTree 函数,应该可以解决这个问题:

    BiNode* BuildBiTree(BiNode* &t)
    {
        char ch;
        cin >> ch;
        if (ch == '@') return nullptr;
        else
        {
            t = new BiNode;
            t->val = ch;
            BuildBiTree(t->lchild);
            BuildBiTree(t->rchild);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 创建了问题 4月16日

悬赏问题

  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?