我不知道如何调用参数为节点类型的函数



我想在main()中调用这个函数,但问题是当它接收节点类型参数时我应该传入什么参数 在《简单》中,我只想看看我的树的高度。所以请帮助我,删除我在高度函数调用期间遇到的错误,它需要一个节点类型参数,我不知道我应该传递什么。这是整个代码

#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 Emptyn";
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 Emptyn";
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 Emptyn";
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 Emptyn";
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 Emptyn";
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 Emptyn";    
}
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();   
}

好吧,你必须在这个函数中传递树的根,但更好的方法是,如果你再创建一个没有任何参数的函数,并使该函数公开并通过传递 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 Emptyn";    
}
else
{
int left_height=height(root->left);
int right_height=height(root->right);
h=1+max(left_height, right_height);
}
return h;
}

另一种方法是在类中创建一个getRoot()函数,并在main中获取树的根类并传递给height函数。但第一种方法会更好。

相关内容