LeetCode Balanced Binary Tree


LeetCode解題のBalanced Binary Tree
原題
1本の二叉木がバランス二叉木であるかどうかを判断するには,各ノードの左右2本の木の高さ差が1以下の場合にのみ,この木がバランスしている.
注意点:
  • なし
    例:
    入力:
        3
       / \   9  20
        /  \    15   7
      /
     14

    出力:False
    問題を解く構想.
    1つのノードの高さは、その左右2本のサブツリーの高さが大きい値に1を加算し、コードを簡潔にするために、アンバランスを定義するサブツリーの高さを-1とするので、各ノードの高さを計算する際に、左右2本のサブツリーがバランスしているかどうかを別途判断し、アンバランス(左サブツリーのアンバランス|右サブツリーのアンバランス|左右サブツリーの高さ差が1より大きい)であれば、直接-1に戻ります.
    ACソース
    # Definition for a binary tree node.
    class TreeNode(object):
        def __init__(self, x):
            self.val = x
            self.left = None
            self.right = None
    
    
    class Solution(object):
        def isBalanced(self, root):
            """ :type root: TreeNode :rtype: bool """
            return self._isBalanced(root) >= 0
    
        def _isBalanced(self, root):
            if not root:
                return 0
            left, right = self._isBalanced(root.left), self._isBalanced(root.right)
            if left >= 0 and right >= 0 and abs(left - right) <= 1:
                return 1 + max(left, right)
            else:
                return -1
    
    
    if __name__ == "__main__":
        None

    私のGithub(https://github.com/gavinfish/LeetCode-Python)を使用して、関連するソースコードを取得します.