博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 98 Validate Binary Search Tree (python)
阅读量:4170 次
发布时间:2019-05-26

本文共 2200 字,大约阅读时间需要 7 分钟。

leetcode 98 Validate Binary Search Tree
题目描述:
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node's key.
The right subtree of a node contains only nodes with keys greater than the node's key.
Both the left and right subtrees must also be binary search trees.
Example 1:
    2
   / \
  1   3
Binary tree [2,1,3], return true.
Example 2:
    1
   / \
  2   3
Binary tree [1,2,3], return false.
分析:
中序遍历,比较当前节点的值是否大于前一个节点的值,若始终满足大于,则返回真,否则返回假。
法一,需要额外的O(n)的空间

Python代码:

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def isValidBST(self, root):        """        :type root: TreeNode        :rtype: bool        """        if root is None:            return True        if root.left==None and root.right==None:            return True                     self.List=[]        self.left_root_right(root) #调用left_root_right()函数,中序遍历二叉搜索树,将节点的值存入列表List中        for i in range(1,len(self.List)):            if self.List[i]<=self.List[i-1]: #通过for循环遍历列表,若当前值少于或等于前一个值,则返回False                return False        return True         def left_root_right(self,root):        if root==None:            return                 self.left_root_right(root.left) #中序遍历当前子树的左子树        self.List.append(root.val) #将当前子树的根节点的值存入列表List中        self.left_root_right(root.right)#中序遍历当前子树的右子树

法二,不需要额外的O(n)空间

Python代码:

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    pre=None     '''为Solution类添加pre数据成员,在中序遍历二叉搜索树的过程中,pre用来指向当前节点的前驱节点。    注意:pre不能放在isValidBST函数的内部。如果将pre放在isValidBST函数的内部,则每一次递归调用isValidBST函数的时候,    pre都将重新赋值为None。实际上,在每一次递归调用时,我们需要的是上一次调用结束时pre的值'''    def isValidBST(self, root):        """        :type root: TreeNode        :rtype: bool        """        if root is None:             return True        Bool= self.isValidBST(root.left)                if self.pre!=None:            Bool=Bool and (self.pre.val

转载地址:http://mdyai.baihongyu.com/

你可能感兴趣的文章
【算法概论】分治算法:计算数组中的逆序对
查看>>
MyEclipse启动优化
查看>>
MyEclipse自动补全等问题
查看>>
【算法概论】分治算法:归并排序
查看>>
时间复杂度中的log(n)底数到底是多少?
查看>>
C++中的正无穷和负无穷
查看>>
VS2017运行结果框闪退的解决方法
查看>>
【算法概论】分治算法:数组去重
查看>>
【算法概论】分治算法:查找数值
查看>>
【算法概论】分治算法:求主元素
查看>>
【算法概论】分治算法:快速排序
查看>>
安装spyder
查看>>
【算法概论】分治算法:查找中位数
查看>>
【算法概论】分治算法:k路归并
查看>>
Python debug 一
查看>>
Spyder启动慢
查看>>
【算法概论】动态规划:最短路径问题
查看>>
别再让C++头文件中出现“using namespace xxx;”
查看>>
【数据结构】图 - 邻接表表示法
查看>>
向量vector的初始化
查看>>