バランスツリーかどうかを判断する
7048 ワード
タイトルの説明
ツリーを入力し、そのツリーがバランスツリーであるかどうかを判断します.
へいこうにじゅ
定義:空のツリーまたは左右の2つのサブツリーの高さ差の絶対値は1を超えず、左右の2つのサブツリーはバランスのとれた2つのツリーです.例:
例1はバランスツリーであり,バランスツリーの定義を満たす.Eの左サブツリーの深さは3,Eの右サブツリーの深さは2であり,左右のサブツリーはバランスツリーである.
例2は平衡二叉木ではなく,Eの左サブツリー深さは3,Eの右サブツリー深さは1であった.
例3はバランスツリーではなく,Eの右サブツリーはバランスツリーではない.
Python実現
出力結果:False
ツリーを入力し、そのツリーがバランスツリーであるかどうかを判断します.
へいこうにじゅ
定義:空のツリーまたは左右の2つのサブツリーの高さ差の絶対値は1を超えず、左右の2つのサブツリーはバランスのとれた2つのツリーです.例:
1:
E
/ \
A D
/ \
B C
2:
E
/
A
/ \
B C
3:
E
/ \
A D
/ \ \
B C F
\
G
例1はバランスツリーであり,バランスツリーの定義を満たす.Eの左サブツリーの深さは3,Eの右サブツリーの深さは2であり,左右のサブツリーはバランスツリーである.
例2は平衡二叉木ではなく,Eの左サブツリー深さは3,Eの右サブツリー深さは1であった.
例3はバランスツリーではなく,Eの右サブツリーはバランスツリーではない.
Python実現
# -*- coding: utf-8 -*-
"""
E
/ \
A D
/ \ \
B C F
\
G
"""
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isbanlance(self, p):
if p is None:
return True
left = self.depth(p.left)
right = self.depth(p.right)
return abs(left - right) <= 1 and self.isbanlance(p.left) and self.isbanlance(p.right)
def depth(self, p):
if p is None:
return 0
return 1 + max(self.depth(p.left), self.depth(p.right))
if __name__ == '__main__':
a = TreeNode("A")
b = TreeNode("B")
c = TreeNode("C")
d = TreeNode("D")
e = TreeNode("E")
f = TreeNode("F")
g = TreeNode("G")
root = e
e.left = a
e.right = d
a.left = b
a.right = c
d.right = f
f.right = g
s = Solution()
result = s.isbanlance(root)
print(result)
出力結果:False