C/C++教程

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

本文主要是介绍2021-6-12 日记 C++(三十一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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;
        }
    }
};
这篇关于2021-6-12 日记 C++(三十一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!