第五章 树与二叉树 二、二叉树的定义和常考考点,WPL的算法

news2025/1/19 14:25:25

一、定义

二叉树可以用以下方式详细定义:

  • 二叉树是由节点构成的树形结构,每个节点最多可以有两个子节点。
  • 每个节点有以下几个属性:
    • 值:存储该节点的数据。
    • 左子节点:有一个左子节点,如果没有则为空。
    • 右子节点:有一个右子节点,如果没有则为空。
    • 父节点:有一个父节点,如果没有则为空(除根节点外)。
  • 根节点:二叉树的顶部节点,没有父节点。
  • 叶子节点:没有子节点的节点,也称为终端节点。
  • 子树:以某个节点作为根节点的二叉树称为它的子树。
  • 遍历:二叉树的节点遍历可以分为前序遍历、中序遍历和后序遍历,还有层次遍历。

注意:二叉树中的节点数量可以为0,1或多个,空的二叉树也是一棵有效的二叉树。

二、几种特殊的二叉树

1、满二叉树,一个高度为h含有2^h-1个结点的二叉树

特点:

1.只有最后一层有叶子结点。

2.不存在度为1的结点。

3.按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,父结点为\frac{i}{2}

 2、完全二叉树,与同高的满二叉树的子节点编号一致

此图的4层的编号与上图的第4层一一对应,称之为完全二叉树。

特点:

1.只有最后两层有叶子结点。

2.最多存在一个度为1的结点。

3.按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,父结点为\frac{i}{2}

4.i<=\frac{i}{2}为分支结点,i>=\frac{i}{2}为叶子节点。

 3.二叉排序树

一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:

左子树上所有结点的关键字均小于根结点的关键字;
右子树上所有结点的关键字均大于根结点的关键字。

左子树和右子树又各是一棵二叉排序树。

 4.平衡二叉树,树上任一结点的左子树和右子树的深度之差不超过1

 三、考点

常见考点1:

设非空二叉树中度为0、1和2的结点个数分别为n0、n1,和n2,则n0= n2+1

★★★★★(叶子结点比二分支结点多一个)

常见考点2:

二叉树第i层至多有2^{i-1}个结点( i≥1)
m叉树第i层至多有m^{i-1}个结点(( i≥1)

常见考点3:

高度为h的二叉树至多有2^h-1个结点(满二叉树)

常见考点4:

具有n个(n>0)结点的完全二叉树的高度h为\log_{2}(n+1)(\log_{2}n)+1

常见考点5:

四、WPL算法

我们使用先序遍历求WPL

1.先定义二叉树;

2.定义一个递归函数,当当前结点为叶结点时,累计wpl的值

3.若左节点不为空,将左孩子作为新的根结点,深度加一,开启新一轮的递归。

4.若右节点不为空,将右孩子作为新的根结点,深度加一,开启新一轮的递归。

5.当所有子树都遍历到叶节点后结束递归,返回wpl;

#include "stdlib.h"
typedef struct BiNode{
    int weight;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

int wpl_PreOrder(BiTree root, int deep){
    static int wpl=0;
    if (root->rchild==NULL && root->lchild==NULL){
        wpl+=deep*root->weight;
    }
    if (root->lchild!=NULL){
        wpl_PreOrder(root->lchild,deep+1);
    }
    if (root->rchild!=NULL){
        wpl_PreOrder(root->rchild,deep+1);
    }
    return wpl;
}

int WPL(BiTree root){
    return wpl_PreOrder(root,0);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/967117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【包过滤防火墙——iptables静态防火墙】的简单使用

文章目录 规则链的分类--五链处理的动作iptables常用参数和作用 防火墙就是堵和通的作用 iptables &#xff1a;包过滤防火墙&#xff0c;是内核防火墙netfilter的管理工具 核心&#xff1a;四表五链 规则链的分类–五链 在进行路由选择前处理的数据包&#xff1a;PREROUTIN…

python实现zscore归一化和minmax标准化

zscore归一化&#xff1a; minmax from sklearn import preprocessing from sklearn.preprocessing import StandardScaler import numpy as np# 数据 x np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]) print(----------------minmaxscaler标准化-------------) # 调用minma…

RK3568-INPUT输入子系统

本文档以检测按键电平状态为例 硬件连接(KEY0与GPIO3B6引脚相连) 驱动分为三类: 1 自己编写input输入子系统按键驱动 2 使用内核按键中断驱动 /kernel/drivers/input/keyboard/gpio_keys.c 3 使用内核按键轮休驱动 /kernel/drivers/input/keyboard/gpio_keys_polled.c内核…

docker 笔记2 Docker镜像和数据卷

参考&#xff1a; 1.镜像是什么&#xff1f;&#xff08;面试题&#xff09; 是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文…

【LeetCode75】第四十五题 重新规划路线

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一个表示城市连通情况的有向图&#xff0c;要求每个城市都要可以通向0号城市&#xff0c;不同城市之间只有一条路线&#xff0c;我…

Gteam2.0免授权毛玻璃拟态UI带后台版本修复版

程序使用PHP7版本运行 后台信息/Admin 账号admin 密码123456 后台功能 多管理员、系统日志等等功能

知识图谱实战应用26-基于知识图谱构建《本草纲目》的中药查询与推荐项目应用

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用26-基于知识图谱构建《本草纲目》的中药查询与推荐项目应用,本文通过Py2neo连接到知识图谱数据库,系统实现了中药的快速查询、关系分析、智能推荐和知识展示等功能。用户可以输入中药的名称或特征进行查询,系统将从知…

1778_树莓派系统安装

全部学习汇总&#xff1a; GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 一段视频学习教程的总结&#xff0c;对我来说基本上用处不大。因为我自己的树莓派简简单单安装完就开机成功了&#xff0c;而且实现了很多视频中介绍的功能。 …

人工智能研究的未来:20 年机器学习和深度学习的论文创意!

“机器学习的美妙之处在于&#xff0c;它可以应用于你想要解决的任何问题&#xff0c;只要你能为计算机提供足够的例子。” 一、说明 该文章列出了 20 年机器学习和深度学习本科课程的 2023 个潜在论文想法。每个论文的想法都包括一个介绍&#xff0c;简要概述了主题和研究目标…

Elasticsearch 对比传统数据库:深入挖掘 Elasticsearch 的优势

当你为项目选择数据库或搜索引擎时&#xff0c;了解每个选项的细微差别至关重要。 今天&#xff0c;我们将深入探讨 Elasticsearch 的优势&#xff0c;并探讨它与传统 SQL 和 NoSQL 数据库的比较。 1. Elasticsearch简介 Elasticsearch 以强大的 Apache Lucene 库为基础&#…

安装Ubuntu系统,将U盘当作启动盘后写保护怎么恢复?

下载ChipGenius 插入写保护的U盘&#xff0c;打开ChipGenius.exe后可以扫描到U盘&#xff0c;如下图中的E:盘就是我插入的U盘&#xff08;我的PC上只有C、D两个分区&#xff09;&#xff1b; ChipGenius的作用 下载ChipGenius是为了获取U盘的设备信息&#xff1a;重点是主控…

Paddle训练COCO-stuff数据集学习记录

COCO-stuff数据集 COCO-Stuff数据集对COCO数据集中全部164K图片做了像素级的标注。 80 thing classes, 91 stuff classes and 1 class ‘unlabeled’ 数据集下载 wget --directory-prefixdownloads http://images.cocodataset.org/zips/train2017.zip wget --directory-prefi…

stable diffusion实践操作-复制-清空-保存提示词

系列文章目录 stable diffusion实践操作 stable diffusion实践操作-webUI教程 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、右上生成图标附近按钮介绍1. 箭头介绍&#xff08;复现别人的…

博客程序系统其它功能扩充

一、注册功能 1、约定前后端接口 2、后端代码编写 WebServlet("/register") public class RegisterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置…

《凤凰架构》第三章——事务处理

前言 由于一些地方原文感觉不太清楚&#xff0c;有些地方用小林coding的文章代替。 总结 事务处理主要的目的就是要让数据在各种条件下&#xff0c;最终的运行结果都能符合你的期望。要达成这个目标有三点需要满足&#xff1a;原子性&#xff08;业务要么同时成功&#xff0…

RT-Thread 原子操作

原子操作简介 原子操作&#xff08;Atomic operation&#xff09;是指一种不可分割的操作&#xff0c;要么完全执行成功&#xff0c;要么完全不执行。 原子操作的执行过程中不允许有任何中断&#xff0c;如果出现了中断&#xff0c;那么操作的结果就无法保证。 原子操作通常…

【Linux】多路IO转接问题-select

select&#xff1a; 首先设置一个lfd绑定服务端地址结构&#xff0c;用于监听新的连接。select函数调用&#xff0c;用于对整个fd数组进行监听&#xff0c;该数组最大限制1024&#xff0c;通过遍历&#xff0c;来确定是哪个fd有变化&#xff1a; 1.如果是lfd&#xff1a;那么可…

PriorityQueue介绍

PriorityQueue堆的应用找前k个最小数据&#xff08;TOPK问题&#xff09;求k个最小的数优化堆排序 PriorityQueue Java集合框架中提供了PriorityQueue和PriorityBlockingQueue&#xff08;优先级阻塞队列&#xff09;两种类型的优先级队列&#xff0c;PriorityQueue是线程不安…

IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例

如果说COM和DLL让程序间交互数据变得方便&#xff0c;那CGI这门简单而又古老的技术让网络上数据交互变得方便。虽然古老&#xff0c;但浩瀚的互联网上和世界各地的企业内部&#xff0c;仍有许许多多并发访问量不大的业务在使用这门技术。今天做个回顾&#xff0c;并列出一些例子…

完全平方数

题目链接 完全平方数 题目描述 注意点 返回 和为 n 的完全平方数的最少数量 解答思路 初始想到使用动态规划&#xff0c;后续数字的完全平方数可以由前面数字的完全平方数求得&#xff0c;对于任意数字&#xff0c;可以计算其减去从1…i之间&#xff08;保证做减操作后的值…