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);
    }
}
    原文作者:ab409
    原文地址: https://www.jianshu.com/p/570d245cdb6e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞