首页 > 其他分享 >c语言计算二叉树的带权路径长度之和(WPL)

c语言计算二叉树的带权路径长度之和(WPL)

时间:2024-08-17 19:59:05浏览次数:10  
标签:Node lchild weight WPL 带权 二叉树 rchild NULL ROOT

1.WPL:树中全部叶节点的带权路径之和

2.代码中所画的树为:

3.求上述WPL:

WPL=0*1+1*2+1*3+2*4+2*5=23

4.主要代码为:

int wpl(Node *ROOT,int high){
	int n=0;
	if(ROOT!=NULL){
		n=ROOT->weight*high;
		n=n+wpl(ROOT->lchild,high+1);
		n=n+wpl(ROOT->rchild,high+1); 
	}
	return n;
}

5.完整代码为:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
	int weight;
	struct Node *lchild,*rchild;
}Node;
int wpl(Node *ROOT,int high){
	int n=0;
	if(ROOT!=NULL){
		n=ROOT->weight*high;
		n=n+wpl(ROOT->lchild,high+1);
		n=n+wpl(ROOT->rchild,high+1); 
	}
	return n;
}
int main() {
	Node *ROOT=(Node *)malloc(sizeof(Node));
	ROOT->weight=1;
	ROOT->lchild=NULL;
	ROOT->rchild=NULL;
	Node *m=(Node *)malloc(sizeof(Node));
	m->weight=2;
	m->lchild=NULL;
	m->rchild=NULL;
	ROOT->lchild=m;
	Node *n=(Node *)malloc(sizeof(Node));
	n->weight=4;
	n->lchild=NULL;
	n->rchild=NULL;
	m->rchild=n;
	Node *a=(Node *)malloc(sizeof(Node));
	a->weight=3;
	a->lchild=NULL;
	a->rchild=NULL;
	ROOT->rchild=a;
	Node *b=(Node *)malloc(sizeof(Node));
	b->weight=5;
	b->lchild=NULL;
	b->rchild=NULL;
	a->rchild=b;
	printf("WPL为:%d",wpl(ROOT,0));
}

6.执行结果为:

标签:Node,lchild,weight,WPL,带权,二叉树,rchild,NULL,ROOT
From: https://blog.csdn.net/m0_63536041/article/details/141285502

相关文章

  • 数据结构与算法(六)二叉树
    二叉树是一种数据结构,广泛用于计算机科学和编程中。它具有以下几个重要特征:1.基本定义:①二叉树:每个节点最多有两个子节点,分别称为左子节点和右子节点。②节点:二叉树的基本单位,包含数据以及指向其子节点的指针。③根节点:二叉树的第一个节点,没有父节点。④叶子节点:没有子节点的......
  • 代码随想录算法训练营第十七天(一)| 654.最大二叉树 617.合并二叉树
    654.最大二叉树题目:给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。......
  • 二叉树的递归与非递归遍历:C++实现
    在数据结构的学习中,二叉树是一个非常重要的概念。遍历二叉树是理解和操作二叉树的基础。本文将介绍如何使用C++实现二叉树的递归和非递归遍历,包括前序、中序和后序遍历,并对每种遍历方法的原理进行简要介绍。二叉树节点定义首先,我们定义一个简单的二叉树节点结构:structTreeN......
  • 代码随想录 day31|| 56 合并区间,738 单调递增数字,968 监控二叉树
    56合并区间funcmerge(intervals[][]int)[][]int{ //思路先排序,然后按照后一个左区间和前一个右区间进行对比判断是否重叠,重叠扩充右区间 sort.Slice(intervals,func(i,jint)bool{ ifintervals[i][0]==intervals[j][0]{ returnintervals[i][1]<intervals[......
  • 【数据结构】关于树(二叉树)的基础理论知识,你知道吗???
    前言:......
  • 二叉树遍历
    二叉树的遍历是二叉树操作中的一个基本且重要的概念,它指的是按照一定的规则访问二叉树中的每个节点,并且每个节点仅被访问一次。常见的二叉树遍历方式有四种:前序遍历(Pre-orderTraversal)、中序遍历(In-orderTraversal)、后序遍历(Post-orderTraversal)和层序遍历(Level-orderTrave......
  • 【二叉树进阶】--- 二叉搜索树转双向链表 && 最近公共祖先
     Welcometo9ilk'sCodeWorld    (๑•́₃•̀๑) 个人主页:     9ilk(๑•́₃•̀๑) 文章专栏:   数据结构本篇博客我们继续了解一些二叉树的进阶算法。......
  • 每日一题:Leetcode-662 二叉树最大宽度
    力扣题目解题思路java代码力扣题目:给你一棵二叉树的根节点 root ,返回树的 最大宽度 。树的 最大宽度 是所有层中最大的 宽度 。每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些......
  • 实现二叉树的前序遍历
    序遍历的顺序是:先访问根节点,再访问左子树,最后访问右子树。递归和迭代classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intval){this.val=val;this.left=null;this.right=null;}}publicclass......
  • 实现二叉树的中序遍历
    中序遍历的顺序是:先访问左子树,再访问根节点,最后访问右子树。 classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intval){this.val=val;this.left=null;this.right=null;}}publicclassInorde......