二叉树的创建与遍历,并判断是否为二叉排序树
//最终代码
#include <iostream> #include<vector> using namespace std; struct Tree{ int val; Tree *right; Tree *left; Tree(int x):val(x),left(NULL),right(NULL){} }; Tree * Create(vector<int> &a) { Tree *t; cout<<a[0]<<endl; if(a[0]==-1) { t=NULL; a.erase(a.begin()); } else { t=new Tree(a[0]); cout<<t->val<<endl; a.erase(a.begin()); t->left=Create(a); t->right=Create(a); } return t; } bool isSortTree(Tree * t) { if(!t->left&&!t->right) return true; if(t->left ) { if(t->val>t->left->val) return isSortTree(t->left); else return false; } if(t->right ) { if(t->right->val>t->val) return isSortTree(t->right); else return false; } } int main() { vector<int> a; int c; for(int i=0;i<7;i++) { cin>> c; a.push_back(c); } Tree* t; t=Create( a); cout<<t->val; cout<<t->left->val; cout<<t->right->val; bool b=isSortTree(t); cout<<b<<endl; return 0; }
出错:
最开始的时候是这么写的:
void Create(Tree * & t, vector<int> &a)
{
cout<<a[0]<<endl;
if(a[0]==-1)
{
t=NULL;
a.erase(a.begin());
}
else
{
t=new Tree(a[0]);
cout<<t->val<<endl;
a.erase(a.begin());
Create(t->left,a);
Create(t->right,a);
}
}
int main()
{
vector<int> a;
int c;
for(int i=0;i<7;i++)
{
cin>> c;
a.push_back(c);
}
Tree* t;
Create(t, a);
cout<<t->val;
cout<<t->left->val;
cout<<t->right->val;
bool b=isSortTree(t);
cout<<b<<endl;
return 0;
}
一直有错,开始不知道为啥,现在终于懂了,想用引用来改变传入的值,但是引用必须有引用的对象,这里引用的对象没有初始化,声明引用时,必须同时对其进行初始化。

浙公网安备 33010602011771号