二叉树的节点个数以及高度详解(附图解)

article/2025/9/20 2:20:48

二叉树的节点个数以及高度


文章目录

  • 二叉树的节点个数以及高度
  • 前言
  • NO.1 定义链式二叉树
  • NO.2 创建二叉树
  • 一、二叉树节点个数
    • 1.代码展示
    • 2.递归图解
  • 二、二叉树叶子节点个数
    • 1.代码展示
    • 2.递归图解
  • 三、二叉树第k层节点个数
    • 1.代码展示
    • 2.递归图解
  • 四、二叉树高度和深度
    • 1.代码展示
    • 2.递归图解
  • 五、二叉树查找值为x的节点
    • 1.代码展示
    • 2.递归图解
  • 总结


前言

本文介绍二叉树的节点个数以及高度,每道题都附有源码+图解


NO.1 定义链式二叉树

代码如下(示例):

typedef char BTDataType;
typedef struct BinaryTreeNode
{struct BinaryTreeNode* left;struct BinaryTreeNode* right;BTDataType data;
}BTNode;

NO.2 创建二叉树

在这里插入图片描述

我们想要实现如图所示的链式二叉树,代码实现如下(把每一个节点都一一链接起来)

代码如下(示例):

BTNode* BuyNode(BTDataType x)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));if (node == NULL){printf("malloc fail\n");exit(-1);}node->data = x;node->left = node->right = NULL;return node;
}
BTNode* CreatBinaryTree()
{BTNode* nodeA = BuyNode('A');BTNode* nodeB = BuyNode('B');BTNode* nodeC = BuyNode('C');BTNode* nodeD = BuyNode('D');BTNode* nodeE = BuyNode('E');nodeA->left = nodeB;nodeA->right = nodeC;nodeB->left = nodeD;nodeC->left = nodeE;return nodeA;
}

一、二叉树节点个数

我们刚创建完的二叉树中,节点个数有:5 个,下面是代码展示 + 递归图解

1.代码展示

代码如下(示例):

int BinaryTreeSize(BTNode* root)
{return root == NULL ? 0 :BinaryTreeSize(root->left)+ BinaryTreeSize(root->right)+ 1;
}

2.递归图解

在这里插入图片描述

在这里插入图片描述
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!


在这里插入图片描述


二、二叉树叶子节点个数

叶子节点:度为0的节点被称为叶节点,比如我们双肩的二叉树中的D和E两个节点!

1.代码展示

代码如下(示例):

// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL){return 0;}if (root->left == NULL && root->right == NULL){return 1;}return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}

2.递归图解

在这里插入图片描述

在这里插入图片描述
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!


在这里插入图片描述


三、二叉树第k层节点个数

1.代码展示

代码如下(示例):

// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL){return 0;}if (root->left == NULL && root->right == NULL){return 1;}return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}

2.递归图解

在这里插入图片描述

在这里插入图片描述
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!


在这里插入图片描述


四、二叉树高度和深度

树的高度或深度:树中节点的最大层次。我们构建的二叉树的高度或深度为 4

1.代码展示

代码如下(示例):

// 二叉树深度/高度
int BinaryTreeDepth(BTNode* root)
{if (root == NULL){return 0;}//return BinaryTreeDepth(root->left) > BinaryTreeDepth(root->right) /*? BinaryTreeDepth(root->left) + 1 : BinaryTreeDepth(root->right) + 1;*/int leftDepth = BinaryTreeDepth(root->left);int rightDepth = BinaryTreeDepth(root->right);return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}

2.递归图解

在这里插入图片描述

在这里插入图片描述
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!


在这里插入图片描述


五、二叉树查找值为x的节点

1.代码展示

代码如下(示例):

// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL)return NULL;if (root->data == x)return root;BTNode* leftRet = BinaryTreeFind(root->left, x);if (leftRet)return leftRet;BTNode* rightRet = BinaryTreeFind(root->right, x);if (rightRet)return rightRet;return NULL;//return BinaryTreeFind(root->right, x);
}

2.递归图解

在这里插入图片描述
这里这画出了A左节点的递归展开图,右节点递归展开图和下面差不多,感兴趣的可以自行画图!


在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍二叉树的节点个数以及高度以及各自的递归展开图!
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述


http://chatgpt.dhexx.cn/article/HiKk0ts3.shtml

相关文章

二叉树根节点到指定节点的路径

题目描述:给定一棵二叉树和二叉树中一个节点,输出根节点到指定节点间的路径。 10     / \     5 12     / \    4 7 指定节点7,那么输出路径应该是10-5-7。 分析与解法: 这个题目是在我做…

求二叉树根节点到指定节点的路径

算法 求二叉树根节点到指定节点的路径 author:Jingdai date:2020.11.05 题目描述 给你一个棵二叉树,再给你一个指定的节点,求根节点到指定节点的路径。 如图,比如让你求到 4 节点的路径,则应该返回的路径为 [0, 1, 4] 。 思路 …

二叉树节点和度的关系及特点

写在前边的话:你的支持是我写作的动力,有帮助到你的话麻烦点赞加收藏呦。感激不尽!如有错误也请留言指正 目录 一、完全二叉树 节点总数的特点 二、二叉树 度的特点 1.n0与n2的关系 2.节点总数和度的关系 三、例题 例题一 例题二 例题三 一…

二叉树的节点

1、前序:根结点第一个访问,然后访问左、右孩子; 后序:根结点最后访问,开始先访问左、右孩子; 中序:根结点第二个访问,最先访问左孩子,最后访问右孩子 前序序列&#x…

求二叉树的节点个数

如果是空树,则结点个数为0,递归结束 否则结点个数为左子树的结点个数右子树的结点个数1 【算法描述】 int NodeCount(BiTree T) {if (T NULL)return 0; // 如果是空树,则结点个数为0,递归结束elsereturn NodeCount(T->lchild…

数据结构-第五章 二叉树

一、树 1.树的概念 树是一种非线性的数据结构,是由n个结点组成的一个集合。每一棵树都可以被分解为根节点和n棵子树构成(n>0) 根节点(Root):没有父结点的结点称为根节点,如A 父结点:含有子结点的结点,如A是B的父…

零基础学二叉树

目录 二叉树的定义: 二叉树的应用: 认识二叉树: 二叉树的基本形式: 二叉树的节点: 二叉树的高度和深度: 二叉树的子树: 二叉树的度: 满二叉树: 完全二叉树&…

npm 升级

npm 版本升级 mac版本 npm install -g npm1.网上有看到别的同学碰到升级报错的情况:可以试试用管理员身份安装: sudo npm install -g npm windows版本 npm install -g npm2.安装完成之后,输入npm -v检查是否升级成功,我是从6.…

npm 升级依赖包

首先安装升级插件 npm-check-updates $ npm install -g npm-check-updates # 或者 $ cnpm install -g npm-check-updates ncu 是 npm-check-updates 的缩写命令 输入ncu命令,可以看到需要升级安装包 # 查看更新ncu 可以看到有好几个包要更新 # 查看所有ncu命令…

npm升级自身版本

查看版本:npm -v 查看版本详情:npm version 用命令npm view npm version,运行后会输出到目前为止npm的所有版本,如图: 升级为特定的版本,命令:npm -g install npm4.0.2,运行后并检验版本如图:…

npm 升级后,无法运行

更新npm npm install -g npm9.2.0问题:无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。 解决:依次输入如下命令 get-ExecutionPolicySet-ExecutionPolicy -Scope CurrentUserRemoteSignedget-ExecutionPolicy…

npm升级

啥时候升级? 在使用npm安装依赖包,终端出现以下提示 New major version of npm available! 6.13.4 -> 8.5.5 Changelog: https://github.com/npm/cli/releases/tag/v8.5.5 Run npm install -g npm to update! 如何升级 npm install npm -g升级报…

npm升级导致npm报错

文章目录 问题解决其他 问题 事情起因在于,我在执行npm init -y的时候,提示我可以升级 好家伙,脑子一时不清醒,我就执行了。以前看到都没想过要执行,今天不知道怎么了,也许是早饭吃多了撑的 : ) 执行完之…

npm 升级遇到的问题

问题:在VUE项目中,当前的npm版本有点低,想对npm进行升级,将npm从6.14.13的版本升级到8.0.0版本,运行npm install -g npm8.0.0报错 解决方法: 找到node文件夹下面的npm.cmd,将它重命名为npmx.cm…

npm 升级node.js

升级NPM 到最新 查看npm 版本: npm -v 更新到最新版本: npm install npmlatest -g 升级Node.js 从node官网下载最新node.js 安装包覆盖原理的node.js 最新node.js 下载 winr cmd 输入 where node 查看原来node 安装路径 安装成功后查看node 版本

如何升级npm 和 安装nvm 及 升级node.js

1.NPM如何升级? 1.1.可以使用NPM自带的命令进行升级: npm install -g npm 注:这个命令会安装最新的,安装到全局。 2.查看NPM版本 npm -v 注:要是版本过低,可使用上面所说命令进行升级。 3.怎么把node.js升…

算法优化(1):基础知识-凸集,单峰函数,拟凸函数与凸函数,函数凹凸性定义

本文笔记介绍我最近学习的算法优化的基础知识,有: 最优化问题的一般形式约束问题的分类及形式优化问题的分类单峰函数(Unimodal function)的定义拟凸函数(Quasiconvex function)的定义凸集(conv…

deep_learning_凹凸函数

什么是凸函数及如何判断一个函数是否是凸函数 t元j 一、什么是凸函数 对于一元函数f(xf(x),如果对于任意tϵ[0,1]tϵ[0,1]均满足:f(tx1(1−t)x2)≤tf(x1)(1−t)f(x2)f(tx1(1−t)x2)≤tf(x1)(1−t)f(x2),则称f(x)f(x)为凸函数(convex function…