JackiCki 2020-12-25 17:15 采纳率: 33.3%
浏览 153
已采纳

二叉树怎样存储字符串?

我写了一个二叉树结构为char名字,char性别,char学号,char电话,但在存储bt->的是字符串无效,数字的只存储的第一个数字,下面是我的代码和问题截图,输出

#include <iostream>
using namespace std;
#define M 20
#include<cstring>
#include<stdio.h>
#include <fstream>
#include <iomanip>
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
using namespace std;
//int sum = 0;//全局变量,用于统计当前的总人数
class Student//定义student类
{
public:
    friend void Read(char name[], char sex[], char id[], char phone[]);//友元函数,用于读取文件
    char name[15];          //姓名
    char sex[15];           //性别
    char id[15];            //学号
    char phone[15];            //电话号码
};
Student stu[40];
int mem[40];
int sum = 0;

struct BiNode
{
    char name[15];
    char sex[15];
    char id[15];
    char phone[15];
    BiNode* lchild, * rchild;
};
class BiTree
{
public:
    BiTree() { root = Creat(root); }
    ~BiTree() { Release(root); }
    void PreOrder() { PreOrder(root); }
    int BTreeLeaves() { return BTreeLeaves(root); }//叶子结点
private:
    BiNode* Creat(BiNode* bt);//建立一棵二叉树
    void Release(BiNode* bt);//销毁一棵二叉树
    void PreOrder(BiNode* bt);//前序遍历二叉树
    int BTreeLeaves(BiNode* bt); //叶子结点
    BiNode* root;
};
int BiTree::BTreeLeaves(BiNode* bt)
{
    if (bt == NULL) return 0;
    else
        if (bt->lchild == NULL && bt->rchild == NULL)
            return 1;
        else
            return     BTreeLeaves(bt->lchild) + BTreeLeaves(bt->rchild);
}
//根据扩充序列构建二叉树
BiNode* BiTree::Creat(BiNode* bt)
{
    char name[20],sex[20],id[20],phone[20];

    for (int i = 0; i < 7; i++)
    {
        cout << "请输入新同学:";
        cout << ""  ; cin >> name;
        cout << ""  ; cin >> id;
        cout << ""  ; cin >> sex;
        cout << ""  ; cin >> phone;
        if (name[i] == '#') bt = NULL;//#结束分支
        else {
            bt = new BiNode;
            bt->name[i] = name[i];
            bt->id[i] = id[i];
            bt->sex[i] = sex[i];
            bt->phone[i] = phone[i];
            bt->lchild = Creat(bt->lchild);
            bt->rchild = Creat(bt->rchild);
        }
        return bt;
    }
    
}
void BiTree::Release(BiNode* bt)
{
    if (bt == NULL) return;
    else {
        Release(bt->lchild);   //释放左子树
        Release(bt->rchild);   //释放右子树
        delete bt;            //释放根结点
    }
}
void BiTree::PreOrder(BiNode* bt)
{
    for (int i = 0; i < 7; i++)
    {
        if (bt == NULL) return;
        else {
            cout << "姓名:" << bt->name[i] << endl;
            cout << "学号:" << bt->id[i] << endl;
            cout << "性别:" << bt->sex[i] << endl;
            cout << "电话号码:" << bt->phone[i] << endl;
            PreOrder(bt->lchild);
            PreOrder(bt->rchild);
        }
        break;
    }
}
int main()
{
    cout << "请输入一个扩充序列构建二叉树:" << endl;
    BiTree T;
    cout << "\n该二叉树的前序遍历序列是:";
    T.PreOrder();
    cout << "\n该二叉树的叶子结点个数是:" << T.BTreeLeaves() << endl;
    system("pause");
    return 0;
}

 

  • 写回答

2条回答 默认 最新

  • 502203305 2020-12-25 18:28
    关注

    字符串拷贝用 strcpy 或者 memcpy

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog