【python】ツリーがフルツリーであるか否かを判定する

2714 ワード

タイトルリンク:https://www.nowcoder.com/practice/76fb9757332c467d933418f4adf5c73d
問題で与えられたシーケンスは【ルートノードから始まり、上から下へ、同層の左から右へのノードシーケンス】
考え方:
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')