【python】ツリーがフルツリーであるか否かを判定する
2714 ワード
タイトルリンク:https://www.nowcoder.com/practice/76fb9757332c467d933418f4adf5c73d
問題で与えられたシーケンスは【ルートノードから始まり、上から下へ、同層の左から右へのノードシーケンス】
考え方:
1.与えられたシーケンスに従って、ツリーを構築する.
2.ツリーに基づいて、中順遍歴シーケンスを得る.
3.「二叉探索ツリー中順増分」の性質により、そのツリーが二叉探索ツリーであるか否かを判断する.
注意:
読み込んだデータは文字列であり、【手順2】で順次遍歴する場合はノードタイプを【int】に変換する必要がある
########################################################
https://www.nowcoder.com/practice/e12c53c925754a07b5f5a2a4dd8fa829
違いは、与えられたデータフォーマットが異なるため、ツリーを構築するプロセスが少し異なることだけです.
Pythonバージョンのcase:73.33%、ACはできません.なぜか分かりません.
問題で与えられたシーケンスは【ルートノードから始まり、上から下へ、同層の左から右へのノードシーケンス】
考え方:
1.与えられたシーケンスに従って、ツリーを構築する.
2.ツリーに基づいて、中順遍歴シーケンスを得る.
3.「二叉探索ツリー中順増分」の性質により、そのツリーが二叉探索ツリーであるか否かを判断する.
注意:
読み込んだデータは文字列であり、【手順2】で順次遍歴する場合はノードタイプを【int】に変換する必要がある
class tree:
def __init__(self,x):
self.val = x
self.left = None
self.right = None
def build_tree(array,i):
if i >= len(array) or array[i] == 'None':
return None
root = tree(array[i])
root.left = build_tree(array,2*i+1)
root.right = build_tree(array,2*i+2)
return root
def tin(res,root):
if not root:
return
tin(res,root.left)
res.append(int(root.val))
tin(res,root.right)
return res
def compare(array):
if not array:
return None
if len(array) == 1:
return True
pre = array[0]
for i in range(1,len(array)):
if array[i] <= pre:
return False
else:
pre = array[i]
return True
array = input().split(',')
if not array:
print(False)
elif len(array) == 1:
print(True)
else:
root = build_tree(array,0)
res = []
tin_tree = tin(res,root)
print(compare(tin_tree))
########################################################
https://www.nowcoder.com/practice/e12c53c925754a07b5f5a2a4dd8fa829
違いは、与えられたデータフォーマットが異なるため、ツリーを構築するプロセスが少し異なることだけです.
Pythonバージョンのcase:73.33%、ACはできません.なぜか分かりません.
class Tree:
def __init__(self,x):
self.val = x
self.left = None
self.right = None
def build_tree(num,rloc):
if rloc < 0:
return None
a,b,c = num[rloc]
root = Tree(a)
root.left = build_tree(num,b-1)
root.right = build_tree(num,c-1)
return root
def tin(res,root):
if not root:
return
tin(res,root.left)
res.append(root.val)
tin(res,root.right)
return res
def compare(array):
if not array:
return True
if len(array) == 1:
return True
pre = array[0]
for i in range(1,len(array)):
if array[i] <= pre:
return False
else:
pre = array[i]
return True
lst = list(map(int,input().split()))
n = lst[0]
root = lst[1]-1
num = []
for i in range(n):
lst = list(map(int,input().split()))
num.append(lst)
if not num:
print('false')
elif len(num) == 1:
print('true')
else:
node = build_tree(num,root)
res = []
tin_tree = tin(res,node)
if compare(tin_tree):
print('true')
else:
print('false')