如何解决将值从结构指针的向量对传递给函数
代码是关于找到树的直径,其中节点通过边连接。我在调用直径函数时遇到问题。它可以编译而没有错误,但是当我运行代码时,代码在调用直径函数后停止执行。
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
struct Node* left,*right;
};
int height(struct Node* node){
if(node==NULL) return 0;
else return max(height(node->left),height(node->right))+1;
}
int diameter(struct Node* node){
if(node==NULL){
return 0;
}
int left_height=height(node->left);
int right_height=height(node->right);
return max(left_height+right_height+1,max(diameter(node->left),diameter(node->right)));
}
int main(){
int n,t1,t2;
cin>>n;
vector<pair<int,int>>v;
for(int i=1;i<n;i++){
cin>>t1>>t2;
v.push_back({t1,t2});
}
vector<pair<struct Node*,struct Node*>>v2;
for(int i=0;i<n-1;i++){
struct Node* node1=new Node,*node2=new Node;
node1->data=v[i].first; node2->data=v[i].second;
node1->left=NULL; node2->right=NULL;
node1->right=node2; node2->left=node1;
v2.push_back({node1,node2});
// v2[i].first=node1; v2[i].second=node2;
}
cout<<"hei"<<endl;
for(int i=0;i<(signed)v2.size();i++){
cout<<v2[i].first->data<<" "<<v2[i].second->data<<endl;
}
// return 0;
int dia=0,maxdia=0;
for(auto it : v2){
dia=diameter(it.first);
if(dia>maxdia) maxdia=dia;
dia=diameter(it.second );
if(dia>maxdia) maxdia=dia;
}
cout<<endl;
cout<<"anything"<<endl;
cout<<maxdia<<endl;
return 0;
}
/* inputs
//Input1
3
3 2
2 1
//Input2
5
4 2
1 4
5 4
3 4
*/
通过手动输入,直径功能可以正常工作
struct Node* NewNode(int data){
struct Node* node=new Node();
node->data=data;
node->left=NULL; node->right=NULL;
}
int main(){
struct Node* root= NewNode(1);
root->left= NewNode(2);
root->right= NewNode(3);
root->left->right= NewNode(4);
root->left->left= NewNode(5);
// root->right->left= NewNode(6);
root->left->left->right= NewNode(7);
root->left->right->right =NewNode(8);
root->left->right->right->left =NewNode(9);
root->left->right->right->left->right =NewNode(10);
cout<<diameter(root)<<endl;
return 0;
}
解决方法
此功能:
int height(struct Node* node){
if(node==NULL) return 0;
else return max(height(node->left),height(node->right))+1;
}
如果在循环图上调用,它将进入无限递归,如下所示:
...
node1->right=node2; node2->left=node1;
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。