数据结构之树&&二叉树<5>---二叉树OJ

如何计算二叉树的节点个数???

第一种就是设计一个全局变量来记录节点

第二种就是用递归的思想

方法一:全局变量计数

思路:定义全局变量gsize,递归遍历二叉树,每访问到一个有效节点,计数 + 1。

cpp 复制代码
int gsize = 0;
void TreeSize1(BTNode* root)
{
	if (root == NULL)
	{
		return;
	}
	gsize++;
	TreeSize1(root->left);
	TreeSize1(root->right);
}

缺点:

  1. 全局变量有状态残留,多次调用必须手动清零,非常容易出错;
  2. 如果多棵树同时统计,全局变量会互相干扰;
方法二:分治递归

递归思想:当前树节点数 = 1(自己) + 左子树节点数量 + 右子树节点数量

cpp 复制代码
int TreeSize2(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	return 1 + TreeSize2(root->left) + TreeSize2(root->right);
}

优点:

  1. 无全局变量,无残留状态,每次调用独立计算;
  2. 代码简洁,符合分治思想,面试最推荐写法;
  3. 不用手动清零,不会多次调用叠加。

2.

104. 二叉树的最大深度 - 力扣(LeetCode)

题目描述

给定二叉树根节点 root,求二叉树的最大深度。

二叉树的深度:从根节点到最远叶子节点的最长路径上的节点数量。 叶子节点:左右孩子都为NULL的节点。

递归思路(分治思想,和前面统计节点数是一套递归范式)

一棵二叉树的最大深度 = 1(当前节点) + max(左子树深度,右子树深度)

  • 递归终止条件:root == NULL,空树深度为 0
  • 先求左子树深度,再求右子树深度,取两者较大值,再加当前节点的 1
cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root==NULL)
        return 0;
        return 1+fmax(maxDepth(root->left),maxDepth(root->right));
    }
};
相关推荐
字节跳动的猫4 分钟前
LikeShop 积分体系全链路改造:获取规则、订单抵扣与积分商品兑换二开
运维·数据结构
上位机妹子30 分钟前
C 语言 数组删除指定元素(快慢指针法)
c语言·数据结构·算法
C++ 老炮儿的技术栈3 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
keyipatience4 小时前
跳表详细解析
开发语言·数据结构·c++·算法·跳表
小小、码农4 小时前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
INGNIGHT6 小时前
1897 · 会议室 3(扫描线)
数据结构·算法
All for pursuit.6 小时前
【贪心-2】253.会议室 II
数据结构·c++·算法·leetcode
Logic1019 小时前
C语言/数据结构字符串题解:按字符类型重排(数字→字母→符号)——三趟扫描稳定分区
c语言·数据结构·字符串·时间复杂度·计数排序·算法题·ascii
Logic10116 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
小蒋学算法16 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法