ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

2021-6-12 日记 C++(三十一)

2021-06-12 09:58:44  阅读:162  来源: 互联网

标签:12 return C++ depth right 2021 深度 节点 二叉树


输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]
返回 true 。

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]
返回 false 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路
1、首先了解怎么样才算平衡二叉树,如何判断二叉树是否平衡。如果根节点的左右子树深度差大于1,那么就可以判断不是平衡二叉树,反之则是平衡二叉树。
2、考虑到二叉树的特性,采用递归的方式遍历整个二叉树的所有节点,并且在遍历过程中记录当前节点的深度。若当前节点左右子树都为空,则将深度记作-1,反之将深度记为深度较大者+1
3、每个节点遍历完后,返回给上一级节点当前节点的深度值,如果左右子树深度差大于1就返回-1,表示已经很大可能不是平衡二叉树了(极少数特殊情况除外),否则返回当前节点的深度
4、整个二叉树遍历完后,通过判断返回的值是-1还是二叉树的深度,来判断二叉树是否平衡二叉树

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        return dfs(root)!=-1;
    }
    int dfs(TreeNode* node)
    {
        if(node!=NULL)
        {
            int left_depth=dfs(node->left);
            if(left_depth==-1)
            {
                return -1;
            }
            int right_depth=dfs(node->right);
            if(right_depth==-1)
            {
                return -1;
            }
            return abs(left_depth - right_depth) >1 ? -1 : max(left_depth,right_depth)+1;
        }
        else
        {
            return 0;
        }
    }
};

标签:12,return,C++,depth,right,2021,深度,节点,二叉树
来源: https://blog.csdn.net/cywcaibi/article/details/117839265

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有