2020快手:判断一棵满二叉树是否为二叉搜索树[python][数据结构][树的性质]
判断一棵满二叉树是否为二叉搜索树
http://www.nowcoder.com/questionTerminal/76fb9757332c467d933418f4adf5c73d
讲真没必要那么麻烦真的去构建一棵树,直接利用二叉搜索树的性质,python十几行就结束了。
- 满二叉树: 深度为n时共2^n-1个节点
- 二叉搜索树: 左节点所有<=根节点<所有右节点
核心思路:中序遍历二叉搜索树应单调递增 (由题意知道节点最小值为0,因此预设pre为-1);同时,满二叉树可以保证不越界。(BTW,如果非满,需要加一些边界条件)
pre, res = -1, True
def search(t, i):
global pre, res
if i >= len(t): return
search(t, 2*i+1) # 左
if t[i] < pre: # 非单调递增
res = False # 找到一个反例即可证明其非二叉搜索树
return res
else:
pre = t[i]
search(t, 2*i+2) # 右
try:
search(list(map(int, input().split(','))), 0)
except Exception as e: # 输入None根节点时直接print(True)
pass
finally:
print(res) 