二叉树的创建与遍历,并判断是否为二叉排序树

//最终代码

#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;
}

  一直有错,开始不知道为啥,现在终于懂了,想用引用来改变传入的值,但是引用必须有引用的对象,这里引用的对象没有初始化,声明引用时,必须同时对其进行初始化。

原文地址:https://www.cnblogs.com/fanhaha/p/7261162.html