鱼C论坛

 找回密码
 立即注册
查看: 1186|回复: 1

关于二叉树存储数据类型的问题

[复制链接]
发表于 2015-4-22 10:32:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Thirteen 于 2015-4-22 10:39 编辑

小甲鱼《数据结构与算法》视频中的二叉树遍历程序如下:
//省略头文件之类
typedef struct BiTNode
{
char data;
struct BiTNode   *lchild, *rchild;
} BiTNode, *BiTree;

void CreateBiTree(BiTree *T)
{
char c;
scanf("%c",&c);
if (' '==c)
{
  *T=NULL;
}
else
{
  *T=(BiTNode *)malloc(sizeof(BiTNode));
****************************************
  (*T)->data=c;
****************************************
  CreateBiTree(&(*T)->lchild);
  CreateBiTree(&(*T)->rchild);
}
}
int main()
{
    BiTree T;
    CreateBiTree(&T);
    return 0;
}
上述例子代码是可以正常运行的!
但是!!!!
我想在二叉树里存储的自定义的数据类型,存储一个vector<char>型作为数据类型:
****//以下为测试程序,只把数据赋值部分做个简单修改,以验证其能否存储vector<char数据***
typedef struct BiTNode
{
vector<char> data;
struct BiTNode   *lchild, *rchild;
} BiTNode, *BiTree;

再把createBiTree()函数中,****之间的“  (*T)->data=c; ”  改成:
vector<char>  ch;
ch.pusn_back(c);
(*T)->data=ch;

此处为,假设存储字符c的向量!

然后这样就会在此处报错!!!!
错误如下:
二叉树的遍历.exe 中的 0x5673ad4a (msvcp100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdd1 时发生访问冲

注:头文件以及using namespace等问题都不存在!

经过多次调试,问题就只出在改动部分,存储数据类型上!!
也调试过改成结构体数据类型也可以运行!!但是只要是vector或者结构体中有vector都会报上述错误!

由于在编写别的代码时,创建的数据结构体中有vector所以建立不了二叉树!

请各位大神指教一下:这是什么问题造成的,有什么办法可以修改此问题?(本人新手,本来想悬赏等级不够)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-22 21:00:24 | 显示全部楼层
问题出在*T=(BiTNode *)malloc(sizeof(BiTNode));这句
malloc仅仅分配空间,并不会调用BiTNode中vector<char>的构造函数来初始化这个成员对象,你应该使用new来处理非一般的C++类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 22:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表