validate binary tree

validate binary tree


昨天简书非常不稳定,不知道是我自己网络的原因,还是简书的服务器不稳定。所以昨天写的今天才发。

今天是一道题目,来自LeetCode,难度为Medium,Acceptance为20.3%

题目如下


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.

解题思路及代码见阅读原文

回复0000查看更多题目

解题思路


首先,老规矩看到二叉树首先想到三种遍历方式。针对该题目,首先想到采用后序遍历的方法最好,即先判断左右子树是不是valid,然后判断根是不是valid。

这样做当然可以,但是时间复杂度却比较高。仔细想想其实这里不是必须使用后序遍历

所以这里可以这样做,对于一个任意一个节点,若它是左子树,那么它应该比它的父节点小;若它是右子树,那么它应该比它的父节点大

对于根节点,因为它没有父节点,直接传递最大最小的整数值。

最后我们来看代码。

代码如下


Java版

public class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean isValidBST(TreeNode root, long minVal, long maxVal) {
        if (root == null) return true;
        if (root.val >= maxVal || root.val <= minVal) return false;
        return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);
    }
}

关注我
该公众号会每天推送常见面试题,包括解题思路是代码,希望对找工作的同学有所帮助

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容