美文网首页
面试题55-2.平衡二叉树_hn

面试题55-2.平衡二叉树_hn

作者: 1只特立独行的猪 | 来源:发表于2020-03-25 20:18 被阅读0次

    题目描述

    输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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

    解答方法

    方法一:先序遍历 + 剪枝 (从底至顶)

    思路

    从底至顶,返回以每个节点root为根节点的子树最大高度(左右子树中最大的高度值加1max(left,right) + 1);
    当我们发现有一例 左/右子树高度差 > 1 的情况时,代表此树不是平衡树,返回-1;
    当发现不是平衡树时,后面的高度计算都没有意义了,因此直接返回-1,避免后续多余计算。
    最差情况是对树做一遍完整DFS,时间复杂度为 O(N)。

    代码

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isBalanced(self, root: TreeNode) -> bool:
            def depth(root):
                if not root:
                    return 0
                left = depth(root.left)
                if left == -1:
                    return -1
                right = depth(root.right)
                if right == -1:
                    return -1
                if abs(left-right) < 2:
                    return max(left, right) + 1
                else:
                    return -1
            return depth(root) != -1
    

    时间复杂度

    O(N): N 为树的节点数;最差情况下,需要递归遍历树的所有节点。

    空间复杂度

    O(N): 最差情况下(树退化为链表时),系统递归需要使用 O(N) 的栈空间。

    相关文章

      网友评论

          本文标题:面试题55-2.平衡二叉树_hn

          本文链接:https://www.haomeiwen.com/subject/nnaxuhtx.html