C++二叉树内存不能“read”错误,求大神解救(已注释)
#include<iostream>
using namespace std;
template <class T> //二叉树节点结构体定义
struct BiNode{
T data;
BiNode<T> *lchild,*rchild;
};
template<class T>
class BiTree{ //建立二叉树的类
private:
void Create(BiNode<T> *&R,T data[],int i);
void Release(BiNode<T> *R);
public:
BiNode<T> *root;
BiTree(){ //无参构造函数
root=NULL;
}
BiTree(T data[]);
void PreOrder(BiNode<T> *R); //树的前序遍历
~BiTree(); //析构函数
};
template<class T>
BiTree<T>::~BiTree(){ //析构函数
Release(root);
}
template<class T>
void BiTree<T>::Create(BiNode<T> *&R,T data[],int i){ //Create函数
if(data[i-1]!=0){
R=new BiNode<T>;
R->data=data[i-1];
R->lchild=R->rchild=NULL;
Create(R->lchild,data,2*i);
Create(R->rchild,data,2*i+1);
}
}
template<class T>
void BiTree<T>::Release(BiNode<T> *R){ //Release函数
if(!R){
Release(R->lchild);
Release(R->rchild);
delete R;
}
}
template<class T>
BiTree<T>::BiTree(T data[]){ //带参构造函数
Create(root,data,1);
}
template<class T>
void BiTree<T>::PreOrder(BiNode<T> *R){ //前序遍历函数
cout<<R->data<<'\t';
PreOrder(R->lchild);
PreOrder(R->rchild);
}
int main(){ //主函数
int data[]={1,2,3,4,5,6,7};
BiTree<int> biTree(data);
biTree.PreOrder(biTree.root);
}
[解决办法]
#include<iostream>
using namespace std;
template <class T> //二叉树节点结构体定义
struct BiNode{
T data;
BiNode<T> *lchild,*rchild;
};
template<class T>
class BiTree{ //建立二叉树的类
private:
void Create(BiNode<T> *&R,T data[],int i, int len);
void Release(BiNode<T> *R);
public:
BiNode<T> *root;
BiTree(){ //无参构造函数
root=NULL;
}
BiTree(T data[], int len);
void PreOrder(BiNode<T> *R); //树的前序遍历
~BiTree(); //析构函数
};
template<class T>
BiTree<T>::~BiTree(){ //析构函数
Release(root);
}
template<class T>
void BiTree<T>::Create(BiNode<T> *&R, T data[], int i, int len){ //Create函数
if(i < len && data[i-1]!=0){
R=new BiNode<T>;
R->data=data[i-1];
R->lchild=R->rchild=NULL;
Create(R->lchild,data,2*i, len);
Create(R->rchild,data,2*i+1, len);
}
}
template<class T>
void BiTree<T>::Release(BiNode<T> *R){ //Release函数
if(!R){
Release(R->lchild);
Release(R->rchild);
delete R;
}
}
template<class T>
BiTree<T>::BiTree(T data[], int len){ //带参构造函数
Create(root,data,1, len);
}
template<class T>
void BiTree<T>::PreOrder(BiNode<T> *R){ //前序遍历函数
cout<<R->data<<'\t';
if(R->lchild) //mark
PreOrder(R->lchild);
if(R->rchild) //mark
PreOrder(R->rchild);
}
int main(){ //主函数
int data[]={1,2,3,4,5,6,7};
BiTree<int> biTree(data, 7);
biTree.PreOrder(biTree.root);
}
[解决办法]
修改了只是可读区间,或者是越界访问!