美文网首页
检查是否为BST

检查是否为BST

作者: 正在努力ing | 来源:发表于2018-08-26 16:01 被阅读0次

    题目:

    请实现一个函数,检查一棵二叉树是否为二叉查找树。
    给定树的根结点指针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
    

    相关文章

      网友评论

          本文标题:检查是否为BST

          本文链接:https://www.haomeiwen.com/subject/zruoiftx.html