关闭

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

标签: 考研数据结构层次遍历二叉树
433人阅读 评论(0) 收藏 举报
分类:

这里写图片描述


思路如下:
利用层次遍历的思路,记录每层的层数level,对于该层的每个叶节点的带权路径长度 = data*(level-1)
算法如下:

        //求叶子节点带权路径长度之和
        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;
 } 

截图如下:
这里写图片描述

1
0
查看评论

2014年计算机求职准备

转自:http://blog.csdn.net/walkinginthewind/article/details/13000431 找工作是一个长期准备的过程,突击是没什么效果的。准备时间越长,准备就越充分,就越容易拿到好的offer。我基本上从研究生一入学就一直在准备找工作的东西,看书、...
  • sgs1018
  • sgs1018
  • 2014-09-25 17:07
  • 402

2010年计算机联考真题——一维数组循环左移

前记从七月份决定开始考研,中间由于听报告,回家复习数学和政治但无论一些时间。自己准备报考山东大学计算机技术的专硕,幸好是数学是考数学二,专业课一直有一门数据结构,这位我的复习节省了很多时间,不想数学一和统考的计算机基础综合的专业复习那么费劲。现在数据结构的复习完全是参照《王道考研系列——2018年数...
  • qq_30091945
  • qq_30091945
  • 2017-08-07 20:17
  • 446

2013年计算机联考真题——确定主元

思路: 首先把主元 确定为A[0],并计数cnt=1。之后从下标为1开始遍历数组, 1.如果A[i] == A[0],cnt++ 2.如果不等,则如果cnt>0,cnt–,如果cnt<0,主元设定为A[i],cnt=1。 遍历结束后,再遍历一遍,确定主元的出现的次数,大于n/2,...
  • qq_30091945
  • qq_30091945
  • 2017-08-11 19:33
  • 462

读博士的好处

1.使35岁之前成为正教授、博导成为可能 如果你只是一个本科毕业,在科研单位或大学里,工作5年后晋升中级职称,在5年晋升副高级,然后在5年晋升正高级,这其中晋级的酸甜苦辣太多太多,单位按成果排队,其中恼人的人际关系等等,最快到近四十岁才晋升到正高级,硕士毕业也如此。如果你博士毕业,再到先进的国家做...
  • liyanzhong
  • liyanzhong
  • 2014-12-14 12:26
  • 971

老机房见证90年代以来的计算机发展!

修理网络教室的垃圾电脑,就像参观博物管,整个过程似乎见证了90年代以来的计算机发展。有P3,塞扬, 毒龙,居然还有VIA C3 !昆腾850MB到20G的硬盘,ST,WD……都有。最大,最新的是WD400-LB三星、NCE、创见,HY-PC100 ECC。晕~~~ 服务器内存都来了。真是花...
  • iceashes
  • iceashes
  • 2007-01-23 16:57
  • 323

下半年计算机技术与软件专业技术资格(水平)考试成绩历年公布时间

下半年计算机技术与软件专业技术资格(水平)考试成绩历年公布时间        2012年下半年计算机技术与软件专业技术资格(水平)考试,已经顺利完成,尘埃落定。        最让考生揪心的事情,就是什么时候可...
  • littletigerat
  • littletigerat
  • 2012-11-12 14:02
  • 6340

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

根据网上的相关资料,通过构造哈夫曼树求解最优二叉树所有叶子结点的带权路径长度之和   # include #include #define maxsize 30; /*     霍夫曼树求解最佳二叉树  完成时间:2015-7-10 */ type...
  • wjhsg
  • wjhsg
  • 2015-07-10 11:19
  • 1199

2014年计算机经典书籍阅读LIST

经典的书籍,一定要熟读,毕竟是经过时间和历史检验的产物,经典之所以可以成为经典,必定有它的过人之处。阅读计算机方向的经典书籍,同时也作为研究生生涯的一个记录,望能珍惜研究生时光,好好阅读经典书籍,有感悟的做一些笔记,一想到这里,就感觉很美好。 1、数学之美 --吴军 2、浪潮之巅
  • litoupu
  • litoupu
  • 2014-02-19 09:16
  • 1001

2014年计算机求职总结--面试篇

又一年实习招聘陆续开始了,这里分享一下我在2013年实习招聘和秋季招聘中的一些面试经历,希望能对找工作的同学有所帮助。 2013年面试过的公司有蘑菇街、网易游戏、阿里巴巴、腾讯、百度、大众点评、人人网、雅虎(北研)、WAP。 一、蘑菇街 一面(实习) 现场面试。先问了一下实习经历以及...
  • WalkingInTheWind
  • WalkingInTheWind
  • 2014-03-30 15:46
  • 8780

2014年计算机考研分数线汇总

(2015年的暂时还没有统计出来,可以拿14年的作为参考) 2014年34所计算机考研分数线汇总 学校 科目 总分 100单科 150单科 大连理工 工学 310 50 70 软件工程[0...
  • Bob1993_Dev
  • Bob1993_Dev
  • 2015-03-09 21:57
  • 1003
    个人资料
    • 访问:155553次
    • 积分:4927
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论