LeetCode 剑指 Offer 55 - I. 二叉树的深度、剑指 Offer 55 - II. 平衡二叉树【Tree/DFS】
发布日期:2021-07-01 02:51:00
浏览次数:2
分类:技术文章
本文共 1507 字,大约阅读时间需要 5 分钟。
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。
提示: 节点总数 <= 10000
思路:简单。代码如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { public: int maxDepth(TreeNode* root) { return !root ? 0 : max(maxDepth(root->left), maxDepth(root->right)) + 1; }};
剑指 Offer 55 - II. 平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过 1
,那么它就是一棵平衡二叉树。
示例 1:
给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4返回 false 。
限制:1 <= 树的结点个数 <= 10000
思路:这道题是求树的深度的扩展题目。如果使用先序或者后序遍历每个结点,然后对每个结点的左右子树调用 maxDepth()
函数,就会造成大量的重复访问。事实上,只访问一次就可以完成这道题目。
用后序遍历的方法遍历二叉树的每个结点。在遍历到一个结点之前,我们就已经遍历了它的左右子树。然后可以根据它的左右子结点的深度判断它是否是平衡的,并得到和记录当前结点的深度(它到叶子结点的路径长度)。当最后遍历到树的根结点时,就判断了整棵二叉树是否是平衡二叉树。
代码如下:
class Solution { public: bool isBalanced(TreeNode* root, int &depth) { if (!root) { depth = 0; return true; } int left, right; if (isBalanced(root->left, left) && isBalanced(root->right, right)) { depth = max(left, right) + 1; return abs(left - right) <= 1; } return false; } bool isBalanced(TreeNode* root) { int depth = 0; return isBalanced(root, depth); }};
转载地址:https://memcpy0.blog.csdn.net/article/details/108384621 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月26日 23时47分37秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
实时开发框架Meteor 实际应用系列<一>---文件的上传和下载
2019-05-03
实时开发框架Meteor API解读系列<四>Server connections
2019-05-03
实时开发框架Meteor API解读系列<五>Session
2019-05-03
实时开发框架Meteor API解读系列<六> DDP
2019-05-03
实时开发框架Meteor 实际应用系列<一>---文件的上传和下载[补充]
2019-05-03
实时开发框架Meteor API解读系列<七> Collection --01
2019-05-03
实时开发框架Meteor API解读系列<八> Timers
2019-05-03
ubuntu sublime无法输入中文问题
2019-05-03
启用fcitx-qimpanel面板程序
2019-05-03
浅谈Q的基本实现
2019-05-03
学习java的30个目标
2019-05-03
IT从业人员必看的10个论坛
2019-05-03
SSH整合容易出现的错误
2019-05-03
十年经典书籍下载
2019-05-03
Java六种异常处理的陋习
2019-05-03
Oracle数据库的大恢复
2019-05-03
把健康彻底说清楚
2019-05-03
J2EE流程中的经验和教训
2019-05-03
MyEclipse整合SSH模式
2019-05-03