检查是否为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
上一篇下一篇

猜你喜欢

热点阅读