2017-03-24 1 views
-1

main()でこの関数を呼び出したいのですが、受け取ったときにどのパラメータを渡すべきかという問題があります。ノード型引数 私の木の高さを見たい。だから助けてください、私がの高さのの関数呼び出し中に直面しているエラーを取り除くのを助けてください。ノード型パラメータが必要です。何を渡すべきか分かりません。ここでは、全体のコードパラメータがNode型である関数を呼び出す方法がわかりません

#include <iostream> 
using namespace std; 
// Binary Search Tree 
// 
class Node 
{ 
    public: 
      int data; 
      Node *left,*right; 
      Node(Node *l=NULL ,int d=0, Node *r=NULL) 
      { 
      left=l; 
      data=d; 
      right=r; 
      } 
}; 

// Binary Search Tree 
class Tree 
{ 
    Node *root; 

    public : 
     Tree() 
     { 
     root=NULL; 
     } 

     bool isEmpty() 
     { 
     if(root==NULL) 
      return true; 
     else 
      return false; 
     } 
     ///////////////////////////////////////////////////////////////////////////////////////////////// 
     // insert funcation 
     ///////////////////////////////////////////////////////////////////////////////////////////////// 
     void insert(int val) 
     { 
     if(isEmpty()) 
     { 
      root=new Node(NULL,val,NULL); 

     } 
     else if(val < root->data && root->left==NULL) 
     { 
      Node *p=new Node(NULL ,val,NULL); 
      root->left=p; 
     } 
     else if(val > root->data && root->right==NULL) 
     { 
      Node *p=new Node (NULL ,val,NULL); 
      root->right=p; 
     } 

     else if(val < root->data) 
     insert(val ,root->left); 
     else 
     insert(val ,root->right); 
     } 
     //////////////////////////////////////// 
     void insert(int val,Node *n) 
     { 
     if(val>n->data && n->right==NULL) 
     { 
      Node *p=new Node(NULL,val,NULL); 
      n->right=p; 
     } 
     else if(val > n->data) 
      insert(val,n->right); 
     else if(val <n->data && n->left==NULL) 
     { 
      Node *p=new Node(NULL,val,NULL); 
      n->left=p; 
     } 
     else 
      insert(val,n->left); 
     } 
     ////////////////////////////////////////////////////////////////////////////////////// 
     // pre Order all data display 
     ////////////////////////////////////////////////////////////////////////////////////// 

     void preOrder(void) 
     { 
     if(isEmpty()) 
     cout<<"Tree is Empty\n"; 
     else 
      preOrder(root); 
     } 
     void preOrder(Node *n) 
     { 
     if(n!=NULL) 
     { 
      cout<<n->data<<endl; 
      preOrder(n->left); 
      preOrder(n->right); 
     } 
     } 
     ////////////////////////////////////////////////////////////////////////////////////// 
     //   in fix Order all data display 
     ////////////////////////////////////////////////////////////////////////////////////// 
     void inOrder() 
     { 
     if(isEmpty()) 
     cout<<"Tree is Empty\n"; 
     else 
      inOrder(root); 
     } 
     void inOrder(Node *n) 
     { 
     if(n!=NULL) 
     { 
      inOrder(n->left); 
      cout<<n->data<<endl; 
      inOrder(n->right); 
     } 
     } 
    ////////////////////////////////////////////////////////////////////////////////////// 
    // post Order all data display 
    ////////////////////////////////////////////////////////////////////////////////////// 

     void posOrder() 
     { 
     if(isEmpty()) 
     cout<<"Tree is Empty\n"; 
     else 
      posOrder(root); 
     } 
     void posOrder(Node *n) 
     { 
     if(n!=NULL) 
     { 
      posOrder(n->left); 
      posOrder(n->right); 
      cout<<n->data<<endl; 
     } 
     } 

     ///////////////////////////////////////////////////////////////////////////////////////////////// 
     //     Search funcation 
     ///////////////////////////////////////////////////////////////////////////////////////////////// 
     void search(int val) 
     { 
     if(isEmpty()) 
        cout<<"Tree is Empty\n"; 
     else 
      search(val,root); 
     } 
     void search(int v,Node *p) 
     {  
      if(v==p->data) 
        cout<<"val : "<<p->data<<endl;   
      else if(v < p->data && p->left!=NULL) 
        search(v,p->left); 
      else if(v>p->data && p->right!=NULL) 
       search(v,p->right); 
      else 
        cout<<"Data Not Found \n"; 
     } 

    Node *l; 
    int deleteKey(int val) 
    { 
     if(isEmpty()) 
     cout<<"Tree is Empty\n"; 
     else if(root->data==val &&(root->left==NULL&&root->right==NULL)) 
     { 
     int temp=root->data; 
     delete root; 
     return temp; 
     } 
     else 
     deleteKey(val,root); 
     } 

     int deleteKey(int v,Node *p) 
     { 
      if(v == p->data) 
      { 

        if(p->left==NULL && p->right==NULL) 
        { 
        if(l->right==p) 
        { 
         int temp=p->data; 
         delete p; 
         l->right=NULL; 
         return temp; 
        } 
        else 
        { 
         int temp=p->data; 
         delete p; 
         l->left=NULL; 
         return temp; 
        } 
        } 
        else if(p->right!=NULL) 
        { 
         int temp=p->data; 
        deleteKey(p,p->right); 
        return temp; 
        } 
        else 
        { 
        int temp=p->data; 
         cout<<"Left : "<<p->data<<endl; 
        deleteKey(p,p->left,v); 
        return temp; 
        } 
      } 
      else if(v < p->data && p->left!=NULL) 
      { 
        l=p; 
        deleteKey(v,p->left); 
      } 
      else if(v>p->data &&p->right!=NULL) 
      {  
        l=p; 
       deleteKey(v,p->right); 
      } 
      else 
        cout<<"Data Not Found ----\n"; 
     } 

     int deleteKey(Node *find ,Node *next) 
     { 
      if(next->left == NULL && next->right != NULL) 
      { 
       find->data = next->data; 
       deleteKey(find->right , next->right); 
      } 
      else if(next->left == NULL&& next->right==NULL) 
      { 
       find->data = next->data; 
       delete next; 
       find->right=NULL; 
      } 
      else 
      { 
       Node *q; 
       while(next->left!=NULL) 
       { 
        q=next; 
        next=next->left; 
       } 
       find->data=next->data; 
       delete next; 
       q->left=NULL; 
      } 
     } 
      int deleteKey(Node* find,Node *next,int v) 
     { 
      if(next->right == NULL && next->left != NULL) 
      { 
       find->data = next->data; 
       deleteKey(find->left , next->left,v); 
      } 
      else if(next->right == NULL&& next->left==NULL) 
      { 
       find->data = next->data; 
       delete next; 
       find->left=NULL; 
      } 
      else 
      { 
       Node *q; 
       while(next->right!=NULL) 
       { 
        q=next; 
        next=next->right; 
       } 
       find->data=next->data; 
       delete next; 
       q->right=NULL; 
      } 
     } 

     ~Tree() 
     { 
     dist(); 
     } 

      void dist() 
      { 
       dist(root); 
      } 
       void dist(Node *n) 
       { 
       if(n!=NULL) 
       { 
        dist(n->left); 
        dist(n->right); 
        delete n; 
       } 
      } 
      int height(Node *root) 
      { 
       int h=0; 
       if (isEmpty()) 
       { 
        cout<<"Tree is Empty\n";  
       } 
       else 
       { 
        int left_height=height(root->left); 
        int right_height=height(root->right); 
        h=1+max(left_height, right_height); 

       } 
       return h; 
      } 

}; 

int main() 
{ 
    Tree obj; 
    obj.height(); 
} 

答えて

1

さてあなたは、この機能では、あなたのツリーのルートを渡すために持っているが、あなたは任意のパラメータを指定せずに1つの以上の機能を作成し、その機能を公開すると、あなたのこれを呼び出す場合、より良いアプローチはなりますがありますthis-> rootを渡すことでプライベート関数を呼び出すことができます。ここで

あなたが見ることができます:

public: 
int getHeight() 
{ 
return height(this->root); //pass your Tree class root 
} 

とクラスで、その関数をプライベートに、効率のために。

private: 
int height(Node *root) 
      { 
       int h=0; 
       if (isEmpty()) 
       { 
        cout<<"Tree is Empty\n";  
       } 
       else 
       { 
        int left_height=height(root->left); 
        int right_height=height(root->right); 
        h=1+max(left_height, right_height); 

       } 
       return h; 
      } 

は、アプローチは、クラス内のgetRoot()関数を作成し、メインのツリークラスのルートを取得し、高さ関数に渡すことです。しかし、最初のアプローチはより良いでしょう。

+0

私はこのようにint mainでこの関数を呼び出しています obj.height( - ); かっこで何を渡すべきですか? ありがとう –

+0

「ツリー」と呼ばれるクラスがあるとします(OPはこのような主張をしていません)。これは適切な方法です。 OPにそのようなクラスがない場合、答えは単純に 'Node *'がツリーを根づけているものをそのまま渡すことです。無関係に、ノードポインタパラメータは理想的には「const」でなければならない。何も変更されていないので、そのように言うことを確認してください。 – WhozCraig

+0

@MaharAsifLakは、 'tree'クラスのインスタンスで' tree'クラスのインスタンスで 'tree'ルートポインタをホストしていますか?もしそうなら、この答えは*完璧です*。 – WhozCraig

関連する問題