输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回True,否则返回False。
假设输入的数组的任意两个数字都互不相同。
处理一棵二叉树的遍历序列,则可以先找到二叉树的根节点,再基于根节点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。
class Solution:
def verify_sequence_of_bst(self, sequence):
if not sequence:
return False
return self.find_value(sequence)
def find_middle_index_by_last(self, sequence):
if not sequence:
return True
current = sequence[-1]
flag, index = True, 0
for si, su in enumerate(sequence):
if flag:
index = si
if su > current:
flag = False
elif su < current:
break
return si == len(sequence)-1 \
and self.find_middle_index_by_last(sequence[:index]) \
and self.find_middle_index_by_last(sequence[index:-1])
st = Solution()
nums = [4, 7, 5, 6, 10, 11, 8]
print(st.verify_sequence_of_bst(nums))
相关题目
输入一个整数数组,判断该数组是不是某二叉搜索树的前序遍历结果。
class Solution:
def verify_sequence_of_bst(self, sequence):
if not sequence or len(sequence) == 1:
return False
return self.find_value(sequence)
def find_middle_index_by_first(self, sequence):
if not sequence or len(sequence) == 1:
return True
current = sequence[0]
flag, index = True, 0
for si, su in enumerate(sequence):
if flag:
index = si
if su > current:
flag = False
elif su < current:
if si == len(sequence) - 1:
si -= 1
break
return si == len(sequence)-1 \
and self.find_middle_index_by_first(sequence[1:index]) \
and self.find_middle_index_by_first(sequence[index:])
(最近更新:2019年07月24日)