一个BST可以用一个array来代替。
我们可以将一个array的数从左到右insert到一个BST中形成一个BST。
目标:写一个函数,输入两个array,并比较这两个array是不是一样的。
复习一下BST的性质,BST的一个节点严格大于所有左侧节点,小于或等于所有右侧的节点。
样例输入
arrayOne
[10, 15, 8, 12, 94, 81, 5, 2, 11]
arrayTwo
[10, 8, 5, 15, 2, 12, 11, 94, 81]
样例输出
True
原因是这两个array都代表了相同的BST,如下所示:
10
/ \
8 15
/ \ \
5 12 94
/ / /
2 11 81
Solution
def sameBsts(arrayOne, arrayTwo):
#边界条件
if len(arrayOne) != len(arrayTwo):
return False
if len(arrayOne) == 0 and len(arrayTwo)==0:
return True
if arrayOne[0] != arrayTwo[0]:
return False
#分别获取左右两边的树
left_one = getSmaller(arrayOne)
left_two = getSmaller(arrayTwo)
right_one = getBiggerorEqual(arrayOne)
right_two = getBiggerorEqual(arrayTwo)
#对树的左右两边分别进行递归
return sameBsts(left_one,left_two) and sameBsts(right_one,right_two)
def getSmaller(array):
smaller = []
for i in range(1, len(array)):
if array[i]<array[0]:
smaller.append(array[i])
return smaller
def getBiggerorEqual(array):
bigger_or_equal = []
for i in range(1, len(array)):
if array[i]>=array[0]:
bigger_or_equal.append(array[i])
return bigger_or_equal
### Time:O(n^2)
### Space:O(n^2)
Time:O(n^2)
Space:O(n^2)
n是每个数组的元素个数