检查是否为BST
2018-08-26 本文已影响0人
正在努力ing
题目:
请实现一个函数,检查一棵二叉树是否为二叉查找树。
给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树
这个题目还要考虑cur.left.right > cur这种情况 ,所以就不能用下面的思路:
递归,每一层考虑cur是否满足大于左节点并且小于右节点
2.5
/ \
2 3
/ \ / \
1 3 2 4
思路:
中序遍历
方法一:
利用辅助数组,把中序遍历的结果存入,看熟不是升序的
方法二:
既然是中序遍历,那么只要用一个辅助变量记录上次的值,只要这次节点的值大于上次节点的值,那么就是升序的
# -*- coding:utf-8 -*-
import sys
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Checker:
def checkBST(self, root):
# write code here
self.arr = []
self.bsf(root)
return self.arr == sorted(self.arr)
def bsf(self,root):
if not root:
return
self.bsf(root.left)
self.arr.append(root)
self.bsf(root.right)
方法二:
有false发生就返回,
class Checker:
mi = -9999
def checkBST(self,root):
if not root:
return True
if not self.checkBST(root.left):
return False
if root.val > self.mi:
self.mi = root.val
else:
return False
if not self.checkBST(root.right):
return False
return True