#include<iostream>
#include<queue>
#include<vector>
using namespace std ;
struct Node{
Node *left, *right ;
int value ;
Node(int val){
value = val ;
left = NULL ;
right = NULL ;
}
bool operator <(const Node &v2) const{
return value > v2.value ;
}
} ;
void caculateHeight(Node root,int h,int &sum){
if (root.left == NULL && root.right == NULL){
sum += root.value * h ;
return ;
}
caculateHeight(*root.left, h+1,sum) ;
caculateHeight(*root.right, h+1,sum) ;
}
int main(){
int size ;
while (cin >> size){
priority_queue<Node> queue ;
while (size--){
int val ;
cin >> val ;
queue.push(Node(val)) ;
}
while (queue.size() != 1){
Node top1 = queue.top() ;
queue.pop() ;
Node top2 = queue.top() ;
queue.pop() ;
Node *newNode = new Node(top1.value + top2.value);
newNode -> right = &top2 ;
newNode -> left = &top1 ;
queue.push(*newNode) ;
}
int sum ;
caculateHeight(queue.top(),1,sum) ;
cout << sum << endl ;
}
return 0 ;
}
如下构建哈夫曼树并求总权值的方法哪里有错误?为什么我得到的树是错误的?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- IT_service_mesh 2023-03-26 21:54关注
参考GPT和自己的思路:在构建哈夫曼树时,新节点应该是指针类型而不是对象类型,因为在对原有的节点进行操作时,可能会出现指向已经弹出队列的对象,从而导致结果错误的情况。因此,在构建新节点时应该使用指针类型,如下所示:
... while (queue.size() != 1){ Node* top1 = new Node(queue.top().value); queue.pop(); Node* top2 = new Node(queue.top().value); queue.pop(); Node *newNode = new Node(top1->value + top2->value); newNode -> right = top2 ; newNode -> left = top1 ; queue.push(*newNode) ; } ...
另外,在调用 caculateHeight 函数时,应该使用指向根节点的指针而不是对象本身,并且必须将 sum 初始值赋为0。更正后的代码如下所示:
int main(){ int size ; while (cin >> size){ priority_queue<Node> queue ; while (size--){ int val ; cin >> val ; queue.push(Node(val)) ; } while (queue.size() != 1){ Node* top1 = new Node(queue.top().value); queue.pop(); Node* top2 = new Node(queue.top().value); queue.pop(); Node *newNode = new Node(top1->value + top2->value); newNode -> right = top2 ; newNode -> left = top1 ; queue.push(*newNode) ; } int sum = 0 ; caculateHeight(*queue.top(),1,sum) ; cout << sum << endl ; } return 0 ; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效