LeetCode OJ:Balanced Binary Tree(平衡二叉树)

LeetCode OJ:Balanced Binary Tree(平衡二叉树)

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

就是去查看一棵树是不是平衡的,一开始对平衡二叉树的理解有错误,所以写错了 ,看了别人的解答之后更正过来了:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     bool isBalanced(TreeNode* root) {
13         int dep;
14         checkBalance(root, dep);
15     }
16     bool checkBalance(TreeNode * root, int &dep)
17     {
18         if(root == NULL){
19             dep = 0;
20             return true;
21         }
22         int leftDep, rightDep;
23         bool isLeftBal = checkBalance(root->left, leftDep);
24         bool isRightBal = checkBalance(root->right, rightDep);
25 
26         dep = max(leftDep, rightDep) + 1;
27         return isLeftBal && isRightBal && (abs(leftDep - rightDep) <= 1);
28     }
29 };

pS:感觉这个不应该easy的题目啊  想的时候头还挺疼的。。

用java的时候用上面的方法去做总是无法成功,所以换了一种方法,这个一开始没有想到,是看别人写的,代码如下所示:

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 public class Solution {
11     public boolean isBalanced(TreeNode root) {
12         if(root == null)
13             return true; 
14         if(root.left == null && root.right == null)
15             return true;
16         if(Math.abs(getDep(root.left) - getDep(root.right)) > 1)
17             return false;
18         return isBalanced(root.left) && isBalanced(root.right);
19     }
20     
21     
22     public int getDep(TreeNode node){
23         if(node == null)
24             return 0;
25         else
26             return 1 + Math.max(getDep(node.left), getDep(node.right));
27     }
28 }

 

转载于:https://www.cnblogs.com/-wang-cheng/p/4891070.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109291.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java回顾之序列化

    Java回顾之序列化

    2021年8月23日
    53
  • vue实现上传文件[通俗易懂]

    vue实现上传文件[通俗易懂]Vue实现上传文件

    2022年8月16日
    9
  • 服务器知识_服务器个人买能干什么

    服务器知识_服务器个人买能干什么一服务器知识1.1电脑所谓的电脑就是一种计算机,而计算机其实是:『接受使用者输入指令与资料,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的资讯』。因此,只要有输入设备(不管是键盘还

    2022年8月1日
    1
  • Cortex m33_STM32F4

    Cortex m33_STM32F4Cortex-M3Bit-Banding1.概述CM3的存储器系统支持所谓的“位带”(bit-band)操作。通过它,实现了对单一bit的原子操作。位带操作仅适用于一些特殊的存储器区域中。从汇编角度看:与传统方法的比较:在位带区中,每个比特都映射到别名地址区的一个字——这是个只有LSB才有效的字。支持位带操作的两个内存区的范围是:**0x2000_0000-0x

    2022年8月31日
    1
  • 5个Web前端开发软件,零基础入门完全够用了!

    对于刚刚入行不久的Web前端编程小白来说,在开发工具的选择方面或许会显得有些力不从心,毕竟网络上众说纷纭,相关的开发工具也是非常之多,以至于许多小伙伴一时不知道从何下手。为了解决这个问题,今天就为大家介绍几个不错的开发工具,感兴趣的朋友可以自己尝试一下:1、Notepad++这个软件就不多说了,记事本的增强版,主要应用在Windows平台下,大部分人都应该使用过,非常轻巧灵活,运行速度快,支持多窗口切换,可编辑语言也非常多,自动补全、语法提示和检查等功能都不错,对于前端开发入门来说,可以作为一个不错的选

    2022年4月9日
    53
  • Django(59)验证和授权「建议收藏」

    Django(59)验证和授权「建议收藏」验证和授权概述Django有一个内置的授权系统。他用来处理用户、分组、权限以及基于cookie的会话系统。Django的授权系统包括验证和授权两个部分。验证是验证这个用户是否是他声称的人(比如用户名

    2022年7月31日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号