验证二叉查找树
来源:互联网 发布:微信三级分销拼团源码 编辑:程序博客网 时间:2024/06/03 22:11
题目描述:给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
1. 节点的左子树中的值要严格小于该节点的值。
2. 节点的右子树中的值要严格大于该节点的值。
3. 左右子树也必须是二叉查找树。
4. 一个节点的树也是二叉查找树。
之前,有一道验证平衡二叉树的问题(详见:点击打开链接),现在回过头看,那道题真的很值得好好学习借鉴,他既是典型的递归算法的应用,同时,也向我们展示了“树”的验证问题比较普遍的解法,而且很简单,总共就5行代码。
那么现在又遇到了一个树的验证问题,验证二叉查找树。基本逻辑与之前“平衡二叉树”是一致的,还是用递归,我们需要做的就是将题目中给出的四个条件放在递归的函数里面。
这里有一点需要注意,那就是1,2两个条件,为了满足,我们还需要两个函数分别取出二叉查找树的最大,最小值,方便同根节点的比较。
代码如下:
"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None"""class Solution: """ @param root: The root of binary tree. @return: True if the binary tree is BST, or false """ def isValidBST(self, root): if root is None: return True if root.left is None and root.right is None: return True if root.left: if not self.isValidBST(root.left): return False elif self.max_val(root.left) >= root.val: return False if root.right: if not self.isValidBST(root.right): return False elif self.min_val(root.right) <= root.val: return False return True def min_val(self, root): result = root.val while root.left: result = root.left.val root = root.left return result def max_val(self, root): result = root.val while root.right: result = root.right.val root = root.right return result # write your code here后面两个函数是求取以root为根节点的二叉查找树的最大,最小值的。所以,调用的条件当然是先判断这棵树是二叉查找树。
不过个人感觉这样写还是效率不够高,不知道诸位有没有更高效的做法?
0 0
- 验证二叉查找树
- 验证二叉查找树
- 验证二叉查找树
- 验证二叉查找树
- 验证二叉查找树
- LintCode:验证二叉查找树
- LintCode : 验证二叉查找树
- Lintcode 验证二叉查找树
- 验证二叉查找树-LintCode
- 验证二叉查找树-LintCode
- 二叉树专题-验证二叉查找树
- lintcode-验证查找二叉树-95
- lintcode(95)验证二叉查找树
- LintCode 97 验证二叉查找树
- LINTCODE —— 验证二叉查找树
- LintCode-分治-验证二叉查找树
- 验证二叉查找树—LintCode
- LintCode 95-验证二叉查找树
- java 使用IO从网络下载图片-
- memcached
- CoreText 实现图文混排
- PHP类中的重要知识点
- tomcat启动正常,但是项目无法访问
- 验证二叉查找树
- jQuery深入之源码解析(三)——构造jQuery对象
- 【Android】Android之命令行安装apk
- 田忌赛马
- 将xml布局转换成View的几种方式
- [分享] Wex5 作品 仿微信聊天工具 部分代码 详情 留下邮箱
- greenplum数据库引擎探究
- 【Alogrithm】DFS实例1
- EasyUI JS加载Tree