2014年计算机联考真题——带权路径长度之和

        //求叶子节点带权路径长度之和
int WPL(BinaryTree* T){
BinaryTree* queue[100];         //构造容量足够大的队列
BinaryTree* cur = T;            //指向根节点指针
int front = -1,rear = -1;       //队头与队尾指针
//last指向每层的最后一个结点，level代表层数
int last = 0,level = 0;
int sum = 0;                //带权路径长度之和
queue[++rear] = cur;        //根节点入队
level++;
//队列不为空一直进行循环
while(front < rear){
cur = queue[++front];   //根结点出队
if(cur->lchild == NULL && cur->rchild == NULL){
int weight = cur->data-'0';
sum += (level-1)*weight;
}
//左孩子非空入队
if(cur->lchild){
queue[++rear] = cur->lchild;
}
//右孩子非空入队
if(cur->rchild){
queue[++rear] = cur->rchild;
}
//队头指针是该层最后一个结点时
if(front == last){
level++;                //层数加一
//最后一个结点指针下移到下一层的最后一个结点
last = rear;
}
}
return sum;
} 

#include <iostream>
using namespace std;

class BinaryTree{
private:
char data;
BinaryTree* lchild;
BinaryTree* rchild;
public:
//二叉树的初始化函数
BinaryTree* Create_BinaryTree(){
BinaryTree* T = new BinaryTree;
char ch;
cin>>ch;
if(ch == '#'){                                                  //“#”是结束标志
T = NULL;
}else{
T->data = ch;                                               //对当前结点初始化
T->lchild = Create_BinaryTree();                            //递归构造左子树
T->rchild = Create_BinaryTree();                            //递归构造右子树
}
return T;
}

//求叶子节点带权路径长度之和
int WPL(BinaryTree* T){
BinaryTree* queue[100];         //构造容量足够大的队列
BinaryTree* cur = T;            //指向根节点指针
int front = -1,rear = -1;       //队头与队尾指针
//last指向每层的最后一个结点，level代表层数
int last = 0,level = 0;
int sum = 0;                //带权路径长度之和
queue[++rear] = cur;        //根节点入队
level++;
//队列不为空一直进行循环
while(front < rear){
cur = queue[++front];   //根结点出队
if(cur->lchild == NULL && cur->rchild == NULL){
int weight = cur->data-'0';
sum += (level-1)*weight;
}
//左孩子非空入队
if(cur->lchild){
queue[++rear] = cur->lchild;
}
//右孩子非空入队
if(cur->rchild){
queue[++rear] = cur->rchild;
}
//队头指针是该层最后一个结点时
if(front == last){
level++;                //层数加一
//最后一个结点指针下移到下一层的最后一个结点
last = rear;
}
}
return sum;
}
};

int main()
{
cout<<"请初始化二叉树:"<<endl;
BinaryTree* T;
T = T->Create_BinaryTree();

cout<<"叶子节点的带权路径之和为:"<<endl;
int wpl = T->WPL(T);
cout<<wpl<<endl;

return 0;
} 

哈夫曼树 带权路径长度WPL

2016-03-20 00:25:43

解决关于哈夫曼编码计算带权路径长度问题

2015-07-24 16:54:24

哈夫曼树结构和带权路径长度计算

2017-11-08 13:55:38

求解最优二叉树所有叶子结点的带权路径长度之和

2015-07-10 11:19:41

哈夫曼编码计算带权路径长度问题

2017-10-26 10:09:39

求哈夫曼树的带权路径长

2014-07-28 11:05:58

给定结点权值，求哈夫曼树的带权路径长度和

2018-05-09 20:18:44

求哈夫曼的带权路径长度

2015-01-16 19:05:31

浙江省计算机三级数据库历年真题

2015年04月22日 337KB 下载

带权路径长度 hnust数据结构

2017-07-18 15:45:45