【完全二叉树节点数!】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数

【完全二叉树】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数

    • :star:解法1 按照完全二叉树
    • 解法2 按照普通二叉树:深度优先遍历 后序 左右中
    • 解法3 按照普通二叉树:广度优先遍历 层序遍历

---------------🎈🎈题目链接🎈🎈-------------------

在这里插入图片描述

⭐️解法1 按照完全二叉树

完全二叉树只有两种情况:
情况一:就是满二叉树,
情况二:最后一层叶子节点没有满。

对于情况一,可以直接用 2 ^ 树深度 - 1 来计算,注意这里根节点深度为1。
对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int countNodes(TreeNode root) {// 按照完全二叉树的特性 满二叉树的结点数为:2^depth - 1// 完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满// 如果是满二叉树,则节点个数为2^depth - 1// 对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。if(root == null) return 0;TreeNode left = root.left;TreeNode right = root.right;int leftDepth = 1, rightDepth = 1;while(left != null){left = left.left;leftDepth ++;}while(right != null){right = right.right;rightDepth ++;}if(leftDepth == rightDepth){return (int)Math.pow(2,leftDepth) -1;}// 单层递归逻辑int leftnum = countNodes(root.left); //左int rightnum = countNodes(root.right);//右int result = leftnum + rightnum +1;  //中return result;}
}

解法2 按照普通二叉树:深度优先遍历 后序 左右中

/递归逻辑:左子树个数 右子树个数 加在一起返回给中间节点 +1

时间复杂度:O(n)
空间复杂度:O(log n),算上了递归系统栈占用的空间

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int countNodes(TreeNode root) {// 深度优先遍历 后序 左右中 if(root == null) return 0;  //终止条件// 递归逻辑:左子树个数 右子树个数 加在一起返回给中间节点 +1int leftnum = countNodes(root.left);int rightnum = countNodes(root.right);int result = leftnum+rightnum+1;return result;}
}       

解法3 按照普通二叉树:广度优先遍历 层序遍历

时间复杂度O(N)
空间复杂度O(N)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int countNodes(TreeNode root) {// 层序遍历if(root == null) {return 0;}Queue<TreeNode> myqueue= new LinkedList<>();int result = 0;myqueue.add(root);while(!myqueue.isEmpty()){int size = myqueue.size();result += size;for(int i = 0; i<size;i++){TreeNode temp = myqueue.poll();if(temp.left != null){myqueue.add(temp.left);}if(temp.right != null){myqueue.add(temp.right);}}}return result;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[力扣 Hot100]Day29 删除链表的倒数第 N 个结点

题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 出处 思路 两个指针间隔n&#xff0c;一趟遍历解决。 代码 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* phead;ListNode* …

有了人行征信,大数据信用还那么重要吗?

相信不少人都有这个疑问&#xff0c;在申贷的时候&#xff0c;都看了自己的征信&#xff0c;还有必要看自己的大数据信用吗?问这个问题的人都是对贷前风控核查的认知不足&#xff0c;小编就用本文为大家介绍一下大数据信用。 大数据信用重要体现在这几个方面&#xff1a; 一、…

中小品牌项目管理软件排行榜:发现行业新秀与潜力股

使用项目管理软件可以帮助企业提高工作效率&#xff0c;降低成本&#xff0c;提升竞争力。在项目管理软件中&#xff0c;不仅有大品牌如Zoho Projects、Microsoft Project、Jira等&#xff0c;还有一些小品牌的软件也备受关注。本文就为大家介绍在项目管理软件排行榜中小品牌榜…

Pandas:DataFrame的完整指南【第82篇—DataFrame】

Pandas&#xff1a;DataFrame的完整指南 Pandas是Python中最流行的数据处理库之一&#xff0c;而其中的DataFrame对象是数据处理的核心。DataFrame为我们提供了一个强大而灵活的数据结构&#xff0c;使得数据的清洗、分析和可视化变得更加简便。在本文中&#xff0c;我们将深入…

山西电力市场日前价格预测【2024-02-15】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-15&#xff09;山西电力市场全天平均日前电价为168.98元/MWh。其中&#xff0c;最高日前电价为366.42元/MWh&#xff0c;预计出现在18:30。最低日前电价为0.00元/MWh&#xff0c;预计出…

SG3225EAN规格书

SG3225EAN 晶体振荡器利用先进的锁相环技术和AT切割晶体单元&#xff0c;提供了宽频率范围和高性能LV-PECL输出&#xff0c;73.5 MHz至700 MHz的宽频率范围&#xff0c;能够保证高稳定性和宽频率调整的能力&#xff0c;适应于多样化的应用需求。2.5V和3.3V两种供电电压&#xf…

蜂蜜器实验-驱动代码测试

一. 简介 上一篇文章实现了蜂鸣器驱动代码&#xff0c;实现关闭蜂鸣器与打开功能。文章地址如下&#xff1a; 蜂鸣器驱动代码完善-CSDN博客 本文对所实现的蜂鸣器驱动代码进行测试。 二. 蜂鸣器驱动代码测试 1. 准备应用程序 这里应用程序还使用 前面实现所使用的Led应用…

鸿蒙系统、澎湃系统和安卓系统的区别一看就懂

前言 最近看了小米澎湃OS的发布会&#xff0c;这是继华为鸿蒙OS脱离Android OS后&#xff0c;国内发布的另一个重量级的操作系统。 依稀记得&#xff0c;当初鸿蒙OS问世的时候&#xff0c;很多人都质疑它是Android OS的套壳&#xff0c;对鸿蒙系统提出了诸多质疑和否定。 现趁着…

【VTKExamples::GeometricObjects】第一期 TextActor

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例TextActor,并解析接口vtkTextActor,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. TextActor 该样例有两…

代码随想录算法训练营第十六天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

代码随想录算法训练营第十六天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树 文章目录 代码随想录算法训练营第十六天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树1 LeetCode 654.最大二叉树2 LeetCode 61…

代码随想录刷题笔记 DAY 29 | 非递减子序列 No.491 | 全排列 No.46 | 全排列 II No. 47

文章目录 Day 2901. 非递减子序列&#xff08;No. 491&#xff09;1.1 题目1.2 笔记1.3 代码 02. 全排列&#xff08;No. 46&#xff09;2.1 题目2.2 笔记2.3 代码 03. 全排列 II&#xff08;No. 47&#xff09;3.1 题目3.2 笔记3.3 代码 Day 29 01. 非递减子序列&#xff08;…

普通人做抖音小店真的能赚钱吗?别在做美梦了,都醒醒吧!

大家好&#xff0c;我是电商糖果 糖果做电商七年了&#xff0c;这中间也起起落落过&#xff0c;2020年开始做抖音小店。 虽然靠着小店自己有了团队&#xff0c;翻了身。 但是只要有人问糖果&#xff0c;普通人做抖音小店真的能赚到钱吗&#xff1f; 我的回答依旧是看个人。…