首页 > 其他分享 >## day16 - 二叉树part03

## day16 - 二叉树part03

时间:2023-09-26 18:56:19浏览次数:31  
标签:node right return ## getHeight int day16 二叉树

day16 - 二叉树part03

力扣104. 二叉树的最大深度

思路:最大深度,即为顶点高度。

如果想求高度,人类思维的角度,就是从底层开始算,往上一层+1,加到顶点就是高度,也就是最大深度。

因此要用后序遍历,这样可以左右根的顺序进行遍历,从而一层一层向上返回结果,返回到根节点的时候就计算出来了最大深度

代码

class Solution {
public:

    int getHeight(TreeNode* node)
    {
        //如果节点是空,那么高度的0
        if (node == nullptr)
        {
            return 0;
        }
        //计算左孩子的高度
        int lh = getHeight(node->left);
        //计算右孩子的高度
        int rh = getHeight(node->right);
        //当前节点的高度,等于1+左右孩子最大的高度
        int height = 1 + max(lh, rh);
        return height;
    }


    int maxDepth(TreeNode* root) {
        return getHeight(root);
    }
};
力扣559. N叉树的最大深度

思路:就是把之前只有两个孩子的情况,换成for循环。遍历出最大值。

class Solution {
public:

    int getHeight(Node* node)
    {
        if (node == nullptr)
        {
            return 0;
        }
        int maxHeight = 0;
        for (int i = 0; i < node->children.size(); i++)
        {
            maxHeight = max(maxHeight, getHeight(node->children[i]));
        }
        return 1 + maxHeight;
    }


    int maxDepth(Node* root) {
        
        return getHeight(root);
    }
};
力扣222. 完全二叉树的节点个数

思路:判断二叉树是否是满二叉树,如果是,则直接使用公式2的n次方减1返回节点数量,使用位运算。

如果不是,则继续判断左右子树是否是满二叉树,直到是为止,因为叶子节点必定是慢二叉树。

代码

class Solution {
public:

    int getNum(TreeNode* node)
    {
        if (node == nullptr)
        {
            return 0;
        }
        TreeNode* left = node->left;
        TreeNode* right = node->right;
        int leftdepth = 0;
        int rightdepth = 0;
        while (left)
        {
            left = left->left;
            leftdepth++;
        }
        while(right)
        {
            right = right->right;
            rightdepth++;
        }
        if (leftdepth == rightdepth)
        {
            return (2<<leftdepth) - 1;
        }
        else
        {
            return getNum(node->left) + getNum(node->right) +1;
        }
    }

    int countNodes(TreeNode* root) {
        return getNum(root);
    }
};

标签:node,right,return,##,getHeight,int,day16,二叉树
From: https://www.cnblogs.com/xiaowangshu1/p/17730920.html

相关文章

  • CNN --Inception Module
    Smiling&Weeping ----祝你想我在平静的湖面不止在失控的雪山之前说明:InceptionModule1.卷积核超参数选择困难,自动找到卷积的最佳组合2.1x1卷......
  • 9.25 周一总结
    try{Filefile=newFile("wrong.txt");if(file.exists())file.delete();try{//创建新(空)文件(原文件不存在时,才会创建成功)file.createNewFile();}catch(Exceptione){e.printStackTrace();}FileWriterwriter=newFileWriter("wrong.txt",true);......
  • 2023021885
    2023021885杨少雄swordnewnew的主页-博客园(cnblogs.com)开朗数据库,HTML滑板,摩托车前端工程师希望大家玩的开心,在这次的合作中相互学习,相互进步......
  • bfs (9/26)
    bfs可用于权值相同为1的时候求最短路问题#include<iostream>#include<algorithm>#include<cstring>#include<queue>usingnamespacestd;constintN=110;typedefpair<int,int>PII;queue<PII>q;inta[N][N],f[N][N];intn,m;intbfs()......
  • 游客必读
    退役之前,在cnblog里发表一下自己对竞赛一些事宜的看法吧。你可以理解为闲话。如果您是其他地方的OIer,看个乐子就好;如果您是本校或者附近的OIer,希望你也可以以乐观的心态将竞赛这条路坚持下去;如果您是老师,请不要见怪,我可以保证我说的没有一句是气话。我知道我们作为学生资......
  • Codeforces Round 899 (Div. 2)
    赛后四题B题直接枚举不存在的元素即可C题的trick有点像之前abc的某道题,对于奇数位置它一定可以贡献,对于偶数位置,如果它有数选了,那么它就能够贡献。\(f[i]\)表示到前i个且至少选了一个的最大答案。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#de......
  • B3637 最长上升子序列
    B3637最长上升子序列dp模板题以样例124134作为说明每个数都是自己的一个子序列,所以全部初始化为1从1-n开始循环,定下来当前要计算的数i再从1-i开始循环,判断i的最长上升子序列,定为j如果i比j要大,则说明是上升的,此时的长度为i的长度与j的长度+1的最......
  • Go每日一库之24:gjson
    简介之前我们介绍过gojsonq,可以方便地从一个JSON串中读取值。同时它也支持各种查询、汇总统计等功能。今天我们再介绍一个类似的库gjson。在上一篇文章Go每日一库之buntdb中我们介绍过JSON索引,内部实现其实就是使用gjson这个库。gjson实际上是get+json的缩写,用于读取JSO......
  • os.path:Python操作和处理文件路径
    前言os.path是平台独立的文件名管理库,使用该库能够很方便来处理多个平台上的文件。即使程序不打算在平台之间移值,也应当使用os.path库来完成可靠的文件名解析。本篇博文将详细介绍os.path库的用法。解析路径的基本用法os.path中的第一组函数可以用来将表示文件名的字符串解析......
  • P1111 修复公路
    并查集模板题只要按时间从小到达排序,然后加入并查集中即可,维护最大值。如果并查集的数量等于n,则直接退出即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;structnode{ intu,v,t; booloperator<(constnode&a)const{ re......