首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++:如何计算二叉树中其值模块的高度小于2的节点数?

C++中计算二叉树中其值模2的高度小于2的节点数可以通过递归的方式实现。具体步骤如下:

  1. 定义二叉树的节点结构,包含节点值和左右子节点指针。
代码语言:txt
复制
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
  1. 定义一个递归函数,用于计算满足条件的节点数。
代码语言:txt
复制
int countNodes(TreeNode* root) {
    if (root == nullptr) {
        return 0;
    }
    
    int count = 0;
    if (root->val % 2 < 2) {
        count++;
    }
    
    count += countNodes(root->left);
    count += countNodes(root->right);
    
    return count;
}
  1. 创建二叉树并调用递归函数进行计算。
代码语言:txt
复制
int main() {
    // 创建二叉树
    TreeNode* root = new TreeNode(1);
    root->left = new TreeNode(2);
    root->right = new TreeNode(3);
    root->left->left = new TreeNode(4);
    root->left->right = new TreeNode(5);
    root->right->left = new TreeNode(6);
    root->right->right = new TreeNode(7);
    
    // 计算满足条件的节点数
    int result = countNodes(root);
    cout << "满足条件的节点数:" << result << endl;
    
    // 释放内存
    delete root->left->left;
    delete root->left->right;
    delete root->right->left;
    delete root->right->right;
    delete root->left;
    delete root->right;
    delete root;
    
    return 0;
}

以上代码实现了计算二叉树中其值模2的高度小于2的节点数。在这个例子中,二叉树的节点值都是整数,我们通过对节点值取模2来判断是否满足条件。具体的应用场景和推荐的腾讯云相关产品和产品介绍链接地址需要根据实际需求来确定,可以参考腾讯云的官方文档和产品介绍页面获取更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2021-2-17:Java HashMap key 哈希如何计算,为何这么计算

首先,我们知道 HashMap 底层实现是开放地址法 + 链地址法方式来实现。 ? 即数组 + 链表实现方式,通过计算哈希,找到数组对应位置,如果已存在元素,就加到这个位置链表上。...这个数组大小一定是 2 n 次方,因为找到数组对应位置需要通过取余计算,取余计算是一个很耗费性能计算,而对 2 n 次方取余就是对 2 n 次方减一取与运算。...所以保持数组大小为 2 n 次方,这样就可以保证计算位置高效。 那么这个哈希究竟是怎么计算呢?假设就是用 Key 哈希直接计算。...其实 key1 和 key2 高位是不一样。...由于数组是从小到达扩容,为了优化高位被忽略这个问题,HashMap 源码对于计算哈希做了优化,采用高位16位组成数字与源哈希取异或而生成哈希作为用来计算 HashMap 数组位置哈希

1.2K20

判断是不是平衡二叉树

题目以及C++语言解法,欢迎关注~ 倘若需要了解数据结构,可以点击:万字长文带你漫游数据结构世界 Part179.判断是不是平衡二叉树 1题目描述 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树...在这里,我们只需要考虑平衡性,不需要考虑是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它左右两个子树高度绝对不超过1,并且左右两个子树都是一棵平衡二叉树...输入描述:输入一棵二叉树根节点 返回描述:输出一个布尔类型 示例 1 输入: {1,2,3,4,5,6,7} 输出: true 示例 2 输入: {} 输出: true 2思路 &...但是上面的计算,仔细观察就会发现会有很多重复计算过程,比如下面的数,计算子树深度时候,计算 1 左子树,和计算 2 ,基本都重复了。 应该如何避免这种重复计算呢?...,否则,需要计算右子树高度,同样需要不等于-1,如果两者差不符合小于等于1,那么说明它们不平衡,返回-1。

98120

数据结构: 树和堆

:从根到该节点所经分支上所有节点; 子孙:以某节点为根子树任一点都称为该节点子孙。...二叉树性质: 性质1 二叉树第i层上点数目最多为2^i-1(i≥1) 性质2 深度为k二叉树至多有2^k-1个结点(k≥1) 性质3 在任意-棵二叉树,若叶子结点(即度为0结点)个数为...满二叉树(FullBinaryTree)  一棵深度为k且有2^k-1个结点二又树称为满二叉树。 满二叉树特点:   (1)每一层上点数都达到最大。...即对给定高度,它是具有最多结点数二叉树。   (2)满二叉树不存在度数为1结点,每个分支结点均有两棵高度相同子树,且树叶都在最下一层上。...若一棵二叉树至多只有最下面的两层上结点度数可以小于2,并且最下一层上结点都集中在该层最左边若干位置上,则此二叉树称为完全二叉树

80531

数据结构之树

二叉树第i层至多有2(i-1)次方个结点;深度为k二叉树至多有2k次方-1个结点;对任何一棵二叉树T,如果终端结点数为n0,度为2点数为n2,则n0=n2+1。...二叉树性质: 1) 在非空二叉树,第i层结点总数不超过2i-1, i>=1;   2) 深度为h二叉树最多有2h-1个结点(h>=1),最少有h个结点;   3) 对于任意一棵二叉树,如果叶结点数为...二叉排序树或者是一棵空树,或者是具有下列性质二叉树: (1)若左子树不空,则左子树上所有结点小于根结点; (2)若右子树不空,则右子树上所有结点均大于或等于它根结点; (3)左...平衡二叉树常用算法有红黑树、AVL树等。在平衡二叉搜索树,我们可以看到,高度一般都良好地维持在O(log2n),大大降低了操作时间复杂度。 AVL树 AVL树是最先发明自平衡二叉查 找树。...若是满足以下特性,即可称为堆:“给定堆任意节点 P 和 C,若 P 是 C 母节点,那么 P 小于等于(或大于等于) C ”。

76020

(42) 排序二叉树 计算机程序思维逻辑

树有一个高度或深度概念,是从根到叶子节点经过节点个数最大,左边树高度为3,右边为5。 排序二叉树也是二叉树,但,它没有重复元素,而且是有序二叉树,什么顺序呢?...比如说左边树,根节点为5,左边小于5,右边都大于5。再看右边树,根节点为7,左边小于7,右边都大于7,在以3为根左子树右子树都大于3。 排序二叉树有什么优点?...此外,在排序二叉树,可以方便查找最小最大,最小即为最左边节点,从根节点一路查找左孩子即可,最大即为最右边节点,从根节点一路查找右孩子即可。...排序二叉树保持了元素顺序,而且是一种综合效率很高数据结构,基本保存、删除、查找效率都为O(h),h为树高度,在树平衡情况下,h为log2(N),N为节点数,比如,如果N为1024,则log2...理解了排序二叉树基本概念和算法,理解TreeMap和TreeSet就比较容易了,让我们在接下来探讨这两个类。

70360

数据结构图文解析之:树简介及二叉排序树C++模板实现.

在同样深度二叉树,满二叉树点数目是最多,叶子数也是最多。 ? 完全二叉树 在一棵二叉树,只有最下两层度可以小于2,并且最下一层叶子节点集中出现在靠左若干位置上。...根据性质一,深度为k二叉树点数最多为: 2^0 + 2^1 +....+2^(k-1) = 2 ^ k -1 性质三:对任何一棵二叉树T,如果终端节点数为n0,度为2点数为n2 ,那么 n0...(等式二) 由等式一等式而可以推出 n0 = n2 +1 性质四: 具有n个节点完全二叉树高度为至少为log2(n+1) 证明:高度为h二叉树最多有2{h}–1个结点。...反之,对于包含n个节点二叉树高度至少为log2(n+1)。...二叉排序树最小位于最左节点上;最大位于最右节点上: ?

75440

树和二叉树

; 子孙:以某节点为根子树任一点都称为该节点子孙。...除了第 d 层外,其它各层点数目均已达最大,且第 d 层所有节点从左向右连续地紧密排列,这样二叉树被称为完全二叉树; 满二叉树:所有叶节点都在最底层完全二叉树; 平衡二叉树(AVL 树):当且仅当任何节点两棵子树高度差不大于...二叉树 二叉树每个节点最多有两个子节点,分别是左子节点和右子节点。 二叉树性质 二叉树第 i 层上点数目最多为 2i-1 (i≥1)。...在任意一棵二叉树,若终端结点个数为 n0,度为 2 点数为 n2,则 n0=n2+1。 满二叉树 除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树就叫作满二叉树。...二叉查找树要求,在树任意一个节点,左子树每个节点,都要小于这个节点,而右子树节点都大于这个节点。 二叉查找树查找 首先,我们看如何在二叉查找树查找一个节点。

77520

【从二叉树到红黑树】清晰理解红黑树演变---红黑含义

3-节点则是扩充版,包含2个元素和三条链接:两个元素A、B,左边链接指向小于A节点,中间链接指向介于A、B之间节点,右边链接指向大于B节点。...在二叉查找树,插入过程从根节点开始比较,小于节点往右继续与左子节点比,大于则继续与右子节点比,直到某节点左或右子节点为空,把插入进去。这样无法避免偏向问题。...在2-3树,插入过程是这样。 如果将插入一个2-节点,则将2-节点扩充为一个3-节点。 如果将插入一个3-节点,分为以下几种情况。...我们将{7,8,9,10,11,12}数值依次插入2-3树,画出它过程: ? 所以,2-3树设计完全可以保证二叉树保持矮矮胖胖状态,保持性能良好。...例如,Java集合TreeSet和TreeMap,C++ STLset、map,以及Linux虚拟内存管理,都是通过红黑树去实现

2.2K10

【从二叉树到红黑树】清晰理解红黑树演变---红黑含义

3-节点则是扩充版,包含2个元素和三条链接:两个元素A、B,左边链接指向小于A节点,中间链接指向介于A、B之间节点,右边链接指向大于B节点。...在二叉查找树,插入过程从根节点开始比较,小于节点往右继续与左子节点比,大于则继续与右子节点比,直到某节点左或右子节点为空,把插入进去。这样无法避免偏向问题。...在2-3树,插入过程是这样。 如果将插入一个2-节点,则将2-节点扩充为一个3-节点。 如果将插入一个3-节点,分为以下几种情况。...我们将{7,8,9,10,11,12}数值依次插入2-3树,画出它过程: 所以,2-3树设计完全可以保证二叉树保持矮矮胖胖状态,保持性能良好。...例如,Java集合TreeSet和TreeMap,C++ STLset、map,以及Linux虚拟内存管理,都是通过红黑树去实现

71341

平衡搜索二叉树之AVL树解析

前言 树这个神奇结构,由于带有数学中指数增长性质,再给予其一些特殊性质后,被广泛应用于存储和搜索等苦力活,今天我们来学习用来搜索二叉树AVL树是如何实现高效搜索功能。...---- 一、搜索二叉树和平衡二叉树 1.1、搜索二叉树(以升序为例) 首先对于同学们二叉树一定都有一定了解了,原本二叉树每个节点(key)是没有关系、且无序。...而搜寻二叉树,每个节点key一定是大于左子树最大小于右子树最小。...序访问有序 1.2、平衡二叉树二叉树,由于每个节点左右子树可以存在空树,所以在节点数一定情况下,如果树空节点越多,树高度就会越高,如果我们看最坏情况,这棵树将退化为一条单链。...特别的: 在结合以上2点后,这棵树由于: ①序遍历有序 ②遍历时可根据大小快速访问到对应节点(每一层节点数量都是指数增加) 一棵被用于搜索理想二叉树就横空出世了,即平衡搜索二叉树

43440

Java数据结构与算法解析(四)——树概述

度是树内各结点最大2.叶子:度为零结点。 3.分支结点:度不为零结点。 4.树度:树结点最大度。 5.层次与深度 6.树高度:树结点最大层次。...性质2:深度为k二叉树至多有2(k)-1个结点(k>=1)。 证明:在具有相同深度二叉树,当每一层都含有最大结点数时,点数最多。...故二叉树结点总数又可表示为等式二。 (等式二) n=n1+2n2+1 由(等式一)和(等式二)计算得到:n0=n2+1。原命题得证!...这两者统称为斜树 线性表结构其实可以理解为树一种树表达形式 满二叉树 完全二叉树 定义:一棵二叉树,只有最下面两层结点度可以小于2,并且最下一层叶结点集中在靠左若干位置上。...在二叉查找树: (1) 若任意节点左子树不空,则左子树上所有结点小于根结点; (2) 任意节点右子树不空,则右子树上所有结点均大于它根结点; (3) 任意节点

35310

二叉树及其作用浅析

树有很多种,其中二拆树因为特殊结构和特点在计算上最为常用。...根节点左右2个节点,小于根节点在放在左侧,大于根节点放在右侧。 根节点大于左子树任意一个节点小于右节点中任意一,这一规则适用于二叉查找树每一个节点。...在最坏情况下,可能得到是一个单支二叉树高度和节点数相同,相当于一个单链表,对正常时间复杂度有O(lb n)变成了O(n),从而丧失了二叉排序树一些应该有的优点。...最小堆 最小堆,是一种经过排序完全二叉树,其中任一非终端节点数据均不大于左子节点和右子节点。 二叉搜索树上基本操作所花费时间与这棵树高度成正比。...注意,左子树小于右子树。 3,从森林中删除这两棵树,同时把新树加入到森林中。 4,重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树。

3.2K20

多图,一文了解 8 种常见数据结构

二叉树:一颗每一层点数都达到了最大二叉树。有两种表现形式,第一种,像下图这样(每一层都是满),满足每一层点数都达到了最大 2。 ?...第二种,像下图这样(每一层虽然不满),但每一层点数仍然达到了最大 2。 ?...理想情况下,通过 BST 查找节点,所需要检查点数可以减半。 平衡二叉树:当且仅当任何节点两棵子树高度差不大于 1 二叉树。...平衡二叉树本质上也是一颗二叉查找树,不过为了限制左右子树高度差,避免出现倾斜树等偏向于线性结构演化情况,所以对二叉搜索树每个节点左右子树作了限制,左右子树高度差称之为平衡因子,树每个节点平衡因子绝对不大于...⑥、堆 堆可以被看做是一棵树数组对象,具有以下特点: 堆某个节点总是不大于或不小于其父节点; 堆总是一棵完全二叉树

45052

【算法】计算完全二叉树点数

题目 计算完全二叉树点数,复杂度小于O(N) 思路 由于要求复杂度为小于O(N),那么遍历所有节点方式肯定是不可能了。...那么我们知道一个满二叉树点数,满足以下公式,h为二叉树高度: 节点数 = 2^h - 1 所以,对于完全二叉树总是满足以下两种情形: 1、node右子树,到达底部,说明node左子树是满二叉树...node右子树到达底部 2、node右子树,没有到达底部,说明node右子树是底层高度 - 1 二叉树,如图所示: ?...,返回点数 /// node代表当前节点 /// level代表node在第几层 /// h代表左树高度 public static int bs(Node node...,说明node左树是满二叉树 // 因此该树点数 = 左边满二叉树(2^(h - level) - 1) + node节点 + node右节点数 if (mostLeftLevel

1.5K20

【Leetcode -110.平衡二叉树 -226.翻转二叉树

Leetcode -110.平衡二叉树 题目:给定一个二叉树,判断它是否是高度平衡二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 左右两个子树高度绝对不超过 1 。..., 4, 4] 输出:false 示例 3: 输入:root = [] 输出:true 提示: 树点数在范围[0, 5000] 内 10^4 <= Node.val <= 10^4 思路:...化为子问题计算每颗子树左右子树高度;结束条件为子树左右子树高度差大于1; //计算子树高度 int TreeHeight(struct TreeNode* root) {...> 1) return false; //如果当前根左右子树高度小于等于1,递归左子树根和右子树根进行判断 return isBalanced(...3, 1] 示例 3: 输入:root = [] 输出:[] 提示: 树点数目范围在[0, 100] 内 100 <= Node.val <= 100 思路:化为子问题左根左指针指向右根右指针

7110

讲透学烂二叉树(二):图中树定义&各类型树特征分析

日常我们见到二叉树应用有,Java集合TreeSet和TreeMap,C++ STLset、map,以及Linux虚拟内存管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树去实现...树和二叉树三个主要差别 树节点个数至少为1,而二叉树节点个数可以为0 树节点最大度数(节点数量)没有限制,而二叉树节点最大度数为2节点没有左右之分,而二叉树节点有左右之分 二叉树特点...二叉搜索树特性: 若任意节点左子树不空,则左子树上所有节点小于根节点; 若任意节点右子树不空,则右子树上所有节点均大于它根节点; 任意节点左、右子树也需要满足左边小于右边性质...二叉排序树与堆区别 在二叉排序树,某结点右孩子结点一定大于该结点左孩子结点;在堆却不一定,堆只是限定了某结点大于(或小于左右孩子结点,但没有限定左右孩子结点之间大小关系。...平衡二叉树常用算法有红黑树、AVL树等。在平衡二叉搜索树,我们可以看到,高度一般都良好地维持在O(log2n),大大降低了操作时间复杂度。

1.2K00

二叉树一些性质图解

性质3:包含n个结点二叉树高度至少为log2 (n+1)。 性质4:在任意一棵二叉树,若终端结点个数为n0,度为2点数为n2,则n0=n2+1。...2.2 性质2:深度为k二叉树至多有2{k}-1个结点(k≥1) 证明:在具有相同深度二叉树,当每一层都含有最大结点数时,点数最多。...故二叉树结点总数又可表示为等式二。 (等式二) n=n1+2n2+1 由(等式一)和(等式二)计算得到:n0=n2+1。原命题得证! 3....3.2 完全二叉树 定义:一棵二叉树,只有最下面两层结点度可以小于2,并且最下一层叶结点集中在靠左若干位置上。这样二叉树称为完全二叉树。...在二叉查找树: (01) 若任意节点左子树不空,则左子树上所有结点小于根结点; (02) 任意节点右子树不空,则右子树上所有结点均大于它根结点; (03) 任意节点左、右子树也分别为二叉查找树

57620

整理得吐血了,二叉树、红黑树、B&B+树超齐全,快速搞定数据结构

每个节点最多有2个子节点树(即每个定点小于3)。 二叉树特点 至少有一个节点(根节点) 每个节点最多有两颗子树,即每个节点小于3。 左子树和右子树是有顺序,次序不能任意颠倒。...image 二叉查找树(Binary Search Tree - BST,又称二叉排序树、二叉搜索树) 二叉查找树根节点大于左子树任意一个节点小于右子树任意一,且该规则适用于树每一个节点...AVL树特点 具有二叉查找树特点(左子树任一小于父节点,右子树任一点大于父节点),任何一个节点左子树与右子树都是平衡二叉树 任一左右子树高度小于1,即平衡因子为范围为[-1,1] 如上左图根节点平衡因子...d兄弟b只会是黑色,需对子节点添加一点再删除添加节点是可使b变红。...具体搜索步骤如下: 将搜索与树根节点第一个key进行比较 匹配则显示“找到给定节点”并结束搜索,否则进入步骤3 检查搜索是大于还是小于当前key 搜索小于当前key:左子树获取第一个key

2.6K20

开发成长之路(15)-- 数据结构:编程基石

关于栈众多应用场景,例如:单调栈、汉诺塔、波兰式等应用场景,可以移步: 为实习准备数据结构(3)-- 详解 栈 ---- 二叉树 树是我们计算机中非常重要一种数据结构,同时使用树这种数据结构,可以描述现实生活很多事物...详情请移步:为实习准备数据结构(4)-- 二叉树 ---- 平衡二叉树 二叉搜索树一定程度上可以提高搜索效率,但是当原序列有序,例如序列A = {1,2,3,4,5,6},构造二叉搜索树如图。...可以看出当节点数目一定,保持树左右两端保持平衡,树查找效率最高。这种左右子树高度相差不超过1树为平衡二叉树。...红黑树是一种平衡二叉查找树变体,它左右子树高差有可能大于 1,所以红黑树不是严格意义上平衡二叉树(AVL),但 对之进行平衡代价较低, 平均统计性能要强于 AVL 。...这种转换是一种压缩映射,也就是,散列空间通常远小于输入空间,不同输入可能会散列成相同输出,而不可能从散列来唯一的确定输入

70730

文心一言 VS 讯飞星火 VS chatgpt (44)-- 算法导论6.1 1题

在这里插入图片描述 360智脑: 最多元素个数是 h-1。堆定义是一个完全二叉树,其中每个节点都大于或等于(小于或等于)它子节点。因此,堆所有节点都按照从小到大顺序排列。...由于堆是一棵完全二叉树,所以最长路径上点数不超过根节点到叶节点之间路径长度减一,即最长路径长度为 (h-1)/2+1=h/2。因此,堆最多元素数为 h/2。 最少元素个数也是 h-1。...堆最大容量可以通过以下公式计算: A.heapsize = (2^(h-1)) - 1 其中,A 表示堆所在数组,A.heapsize 表示堆元素个数,h 表示堆高度。...堆最小容量可以通过以下公式计算: A.heapsize = 2^(h-1) - 1 + (2h-1) 其中,A 表示堆所在数组,A.heapsize 表示堆元素个数,h 表示堆高度。...因此,在高度为 h ,最大元素个数是堆最大容量,即最大是满二叉树节点总数。最小元素个数是堆最小容量,即最小是满二叉树最底层叶子节点数

17420
领券