在敲代码的时候,没有给创建的指针赋初值,将其指向NULL,后面给二叉树赋值的时候没有全都赋值,故在编译运行代码的时候就报错了,报错为0x000E518B 处(位于 二叉树的遍历算法.exe 中)引发的异常: 0xC0000005: 读取位置 0xCCCCCCE0 时发生访问冲突。
,图片如下
经过查找和百度,因为存在野指针导致内存泄漏,所以写代码的时候还是要规范一些,避免出现这样的错误;
下面是代码,可以正常运行
#include <iostream>
using namespace std;
#include <string>
/*采用二叉树的二叉链表的存储结构*/
typedef struct BiTNode
{
string data;
struct BiTNode *lchild, *rchild;
BiTNode()
{
data = "";
lchild = NULL; //一定要给创建的指针赋初值,不然就是野指针,就会报错
rchild = NULL;
}
}BiTNode, *BiTree;
//二叉树的先序遍历算法
int PreOrderTraverse(BiTNode *T)
{
if (T == NULL) return -2;
else
{
cout << T->data << "->"; //访问根节点
PreOrderTraverse(T->lchild); //递归遍历左子树
PreOrderTraverse(T->rchild); //递归遍历右子树
}
return 0;
}
//中序遍历
int InOrderTraverse(BiTNode *T)
{
if (T == NULL) return -2;
else
{
PreOrderTraverse(T->lchild); //递归遍历左子树
cout << T->data << "->"; //访问根节点
PreOrderTraverse(T->rchild); //递归遍历右子树
}
return 0;
}
//后序遍历
int PostOrderTraverse(BiTNode *T)
{
if (T == NULL) return -2;
else
{
PreOrderTraverse(T->lchild); //递归遍历左子树
PreOrderTraverse(T->rchild); //递归遍历右子树
cout << T->data << "->"; //访问根节点
}
return 0;
}
int main()
{
BiTNode *root = new BiTNode();
BiTNode a, b, c, d, e;
root->data = "Root";
a.data = "A";
b.data = "B";
c.data = "C";
d.data = "D";
e.data = "E";
root->lchild = &a;
root->rchild = &b;
a.lchild = &c;
a.rchild = &d;
b.lchild = &e;
cout << "前序遍历:" << endl;
PreOrderTraverse(root);
cout << "中序遍历:" << endl;
InOrderTraverse(root);
cout << "后序遍历:" << endl;
PostOrderTraverse(root);
system("pause");
}
reference:[https://blog.csdn.net/HK_5788/article/details/42301119]
最后,再次感谢王卓老师在B站的优质课程青岛大学王卓老师数据结构合集