LeetCode Balanced Binary Tree
2789 ワード
LeetCode解題のBalanced Binary Tree
原題
1本の二叉木がバランス二叉木であるかどうかを判断するには,各ノードの左右2本の木の高さ差が1以下の場合にのみ,この木がバランスしている.
注意点: なし
例:
入力:
出力:False
問題を解く構想.
1つのノードの高さは、その左右2本のサブツリーの高さが大きい値に1を加算し、コードを簡潔にするために、アンバランスを定義するサブツリーの高さを-1とするので、各ノードの高さを計算する際に、左右2本のサブツリーがバランスしているかどうかを別途判断し、アンバランス(左サブツリーのアンバランス|右サブツリーのアンバランス|左右サブツリーの高さ差が1より大きい)であれば、直接-1に戻ります.
ACソース
私のGithub(https://github.com/gavinfish/LeetCode-Python)を使用して、関連するソースコードを取得します.
原題
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)を使用して、関連するソースコードを取得します.