//最终代码
#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; }
一直有错,开始不知道为啥,现在终于懂了,想用引用来改变传入的值,但是引用必须有引用的对象,这里引用的对象没有初始化,声明引用时,必须同时对其进行初始化。