剣指offer二叉探索木の後序遍歴シーケンスpython
9681 ワード
タイトルの説明
整数配列を入力し、その配列が二叉探索ツリーの後順に遍歴した結果であるかどうかを判断します.もしそうであればYesを出力し、そうでなければNoを出力します.入力された配列の任意の2つの数字が互いに異なると仮定します.
サンプル
アイデア1:再帰メソッドを使用して、最後の要素、すなわちrootを取り出すたびに、すべてのノードを巡り、左サブツリーと右サブツリーを見つけ、それぞれこのメソッドを使用して検索します.
考え方2:討論区は似たような解法を見て、左右のサブツリーを判断しないで、直接脳の再帰シーケンスがなくて、もし不法なシーケンスが現れたら、つまり右のサブツリーの中でrootより小さくて、falseに戻って、その他の情況の直接シーケンスは1つ減らして再帰を続けます.
最後に
ブラシしたLeetCodeや剣指offerのソースコードをGithubに置いて、好きな友达や役に立つと思う友达にstarやfollowを注文してほしいです.以下のコメントや私信や連絡先で私を探すことができます.連絡先QQ:791034063 Wechat:liuyuhang 791034063 CSDN:https://blog.csdn.net/Sun_White_Boy Github:https://github.com/liuyuhang791034063
転載先:https://www.cnblogs.com/GF66/p/9785464.html
整数配列を入力し、その配列が二叉探索ツリーの後順に遍歴した結果であるかどうかを判断します.もしそうであればYesを出力し、そうでなければNoを出力します.入力された配列の任意の2つの数字が互いに異なると仮定します.
サンプル
[1,2,3,4,5]
true
[1,2,3,6,4,5]
false
アイデア1:再帰メソッドを使用して、最後の要素、すなわちrootを取り出すたびに、すべてのノードを巡り、左サブツリーと右サブツリーを見つけ、それぞれこのメソッドを使用して検索します.
class Solution:
def VerifySquenceOfBST(self, sequence):
if sequence == []:
return False
if len(sequence) == 1 or len(sequence) == 2:
return True
else:
root = sequence.pop(-1)
sign = 0
note = 0
flag = 0
for i in range(len(sequence)):
if sign is 0 and sequence[i] > root:
note = i
sign = -1
if sequence[i] > root:
sign = 1
flag += 1
if (sign == 1) and (sequence[i] < root):
return False
if sign is 0:
note = i
if flag == len(sequence):
note = 1
return self.VerifySquenceOfBST(sequence[:note]) and self.VerifySquenceOfBST(sequence[note:])
考え方2:討論区は似たような解法を見て、左右のサブツリーを判断しないで、直接脳の再帰シーケンスがなくて、もし不法なシーケンスが現れたら、つまり右のサブツリーの中でrootより小さくて、falseに戻って、その他の情況の直接シーケンスは1つ減らして再帰を続けます.
class Solution:
def VerifySquenceOfBST(self, sequence):
if sequence == []:
return False
if len(sequence) == 1 or len(sequence) == 2:
return True
else:
root = sequence.pop(-1)
sign = 0
for i in range(len(sequence)):
if sequence[i] > root:
sign = 1
if (sign == 1) and (sequence[i] < root):
return False
return self.VerifySquenceOfBST(sequence[:i]) and self.VerifySquenceOfBST(sequence[i:])
最後に
ブラシしたLeetCodeや剣指offerのソースコードをGithubに置いて、好きな友达や役に立つと思う友达にstarやfollowを注文してほしいです.以下のコメントや私信や連絡先で私を探すことができます.連絡先QQ:791034063 Wechat:liuyuhang 791034063 CSDN:https://blog.csdn.net/Sun_White_Boy Github:https://github.com/liuyuhang791034063
転載先:https://www.cnblogs.com/GF66/p/9785464.html