一、题目描述

二、算法思想:

本算法目的是求带权路径的长度,就是叶子节点的深度乘以叶子的权重之和。关键是如何求出每个叶子节点的深度,在这里最简单的方法就是利用递归算法。

三、核心代码:

int WPL(BiTNode*root)//封装先序法
{return wp1_PreOrder(root,0);
}
int wp1_PreOrder(BiTNode*root,int deep)
{static int wp1=0;//定义局部静态变量用来存储路径长度if(root->lchild==NULL&&root->rchild==NULL)//如果左右孩子节点都为空,证明为叶子节点wp1+=deep*root->weight;//将加权路径增加if(root->lchild!=NULL)//左孩子不为空,递归遍历左孩子wp1_PreOrder(root->lchild,deep+1);if(root->rchild!=NULL)//右孩子不为空,递归遍历右孩子wp1_PreOrder(root->rchild,deep+1);return wp1;
}

四、完整代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{  //定义结构体
int weight;                           //节点数据
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;int wp1_PreOrder(BiTNode*root,int deep);//先序遍历
int WPL(BiTNode*root);//求
BiTree DLR_creat() ;  //先序创建二叉树
void PreOrderTraverse(BiTree T);//先序遍历
int main()
{BiTNode* root=NULL;printf("请按先序遍历依次输入,以-1表示指针域为空:\n");//由于算法的递归出口是返回NULL,root=DLR_creat();                                  //所以在进行输入时,必须首先将二叉树变成拓展二叉树printf("先序遍历:");PreOrderTraverse(root);                          //前序遍历printf("\nthe WPL is:% d\n",WPL(root));// 打印结果return 0;
}
int WPL(BiTNode*root)//封装先序法
{return wp1_PreOrder(root,0);
}
int wp1_PreOrder(BiTNode*root,int deep)
{static int wp1=0;//定义局部静态变量用来存储路径长度if(root->lchild==NULL&&root->rchild==NULL)//如果左右孩子节点都为空,证明为叶子节点wp1+=deep*root->weight;//将加权路径增加if(root->lchild!=NULL)//左孩子不为空,递归遍历左孩子wp1_PreOrder(root->lchild,deep+1);if(root->rchild!=NULL)//右孩子不为空,递归遍历右孩子wp1_PreOrder(root->rchild,deep+1);return wp1;
}BiTree DLR_creat()    //先序创建二叉树
{int weight;BiTree root;scanf("%d", &weight);if (weight == -1)return NULL;else{root = (BiTree)malloc(sizeof(BiTNode)* 1);//申请动态内存if (root == NULL)//异常情况处理{printf("创建失败!\n");exit(EXIT_FAILURE);}root->weight = weight;root->lchild=DLR_creat();root->rchild = DLR_creat();}return root;
}//先序遍历二叉树
void PreOrderTraverse(BiTree T){if(T){printf("%-3d",T->weight);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}
}

五、测试分析:

渣渣渣变渣渣系列(8)相关推荐

  1. 渣渣渣变渣渣系列(1)

    一.题目描述:(408联考 2010真题) 二.算法思想: 可以将这个问题看作是把数组ab转换为ba(a代表数组的前p个元素,b代表数组中的余下n-p个元素),先将a逆置得到a-1b,再将b逆置得到a ...

  2. 渣渣渣变渣渣系列(5)

    一.题目描述: 现在有n个圆盘从上往下从小到大叠在第一根柱子上,要把这些圆盘全部移动到第三根柱子要怎么移动呢?请找出需要步骤数最少的方案因此我们可以将问题简化描述为:n个盘子和3根柱子:A(源).B( ...

  3. 渣渣渣变渣渣系列(6)

    一.题目描述: 二.算法思想: 本题的算法思想比较简单,因为题中已经给明数据结构,当后缀一样时,使用同一个存储空间,我们只需要想办法找出第一个两个链表的相同地址即可.本算法采用的方法是,首先将指针指向 ...

  4. 渣渣渣变渣渣系列(2)

    一.题目描述:(408联考真题 2011) 二.算法思想: 分别求两个升序序列A和B的中位数,设为a和b,求序列A和B的中位数过程如下: 1)若a=b,则a或b即为所求中位数,算法结束. 2)若a&l ...

  5. 渣渣渣变渣渣系列(4)

    一.题目描述: 二.算法思想: 本算法的关键在于利用两个指针,一个指针用来遍历计数,另一个指针用来指向n-k个值,即倒数第k个值. 三.核心代码: int search_k(int k,link*he ...

  6. 渣渣渣变渣渣系列(3)

    <strong>一.题目描述:</strong> 二.算法思想: 本算法的巧妙之处在于充分利用主元素的定义,即在序列中个数超过半数的元素.那么在动态统计的过程中,主元素出现的频 ...

  7. @字王2012·纵变体系列,共12款

    转载于:https://www.cnblogs.com/ziwang/archive/2012/05/23/9500463.html

  8. 交流信号隔离变送器(DIN导轨安装式)

    产品概述: 导轨安装DIN11交流电压隔离变送器,能将输入的交流信号按比例转换成4~20mA标准信号, 输入交流电压信号:输出为4~20mA直流电流信号或0~5VDC直流电压信号.实现辅助电源和输入输 ...

  9. 苹果呼叫转移设置不了_手机不关机!黑客教你设置手机变空号,开启真正免打扰!...

    怎么把手机号码设置成空号. 一般情况下不想接到电话,关机.飞行模式都能搞定,或者静音还你一片安静. 在王者荣耀排位赛中,此时手机忽然"女友来电",自动跳出游戏界面--快速挂断电话返 ...

最新文章

  1. VMware vSphere开发(1)安装配置VMware vSphere Web Services SDK的运行环境
  2. 意念打字、梦境重现如何成真,张钹、李路明等知名专家共话脑机接口最新进展 | 首届脑科学开放日...
  3. 【转载】PHP报错分析(Corrupted encoded data detected in)
  4. Linux安全学习总结
  5. 延迟任务调度系统—技术选型与设计(上篇)
  6. eclips3.4.2 添加 tomcat6.0不可用解决——重新搞
  7. 怎么用计算机画图工具,使用电脑自带画图工具(画图软件怎样操作的方法
  8. DB2数据库基本操作
  9. matlab int积分常数,matlab int 积分
  10. 学习MyBatis-Plus
  11. 识别12306验证码脚本
  12. 简明GISer Python学习指南
  13. 布伦特原油期货为什么比纽约原油贵那么多
  14. 计算机图形学应用调研论文,计算机图形学的应用论文(2)
  15. python中pass语句的出现是为了保持程序结构的完整性_pass语句的出现是为了保持程序结构的完整性。( )_学小易找答案...
  16. android studio gradle 下载失败万能解决方案
  17. ORACLE数据库 AWR报告收集
  18. 利用七参数求解坐标转换(C#简单快速实现)
  19. SAP MDM主数据管理
  20. Google代码实验室

热门文章

  1. py 网站实时监控+可手动回溯回放网站数据的实现
  2. Java设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆,计算面积,,并写程序验证计算一个点(Point对象)是否在圆(Cricle对象)内
  3. ThingsBoard教程(十九):规则节点概览介绍
  4. 7-28 天梯赛的善良 (PTA C语言)最简
  5. IDEA 2022 常用 插件 安装 与 全局配置 教程 大全
  6. 基于ACF多通道特征的人脸检测——从原理到实现
  7. 知识付费对接微信公众号订阅消息
  8. 让人无语的交通拥挤费
  9. adobe flash player 过期问题
  10. java 数组去除重复_Java从数组中删除重复项?