Leetcode題目98.驗證二叉搜索樹(遞歸-中等)

題目描述:html

給定一個二叉樹,判斷其是不是一個有效的二叉搜索樹。java

假設一個二叉搜索樹具備以下特徵:node

節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
全部左子樹和右子樹自身必須也是二叉搜索樹。spa

示例 1:

輸入:
    2
   / \
  1   3
輸出: true
示例 2:

輸入:
    5
   / \
  1   4
     / \
    3   6
輸出: false
解釋: 輸入爲: [5,1,4,null,null,3,6]。
     根節點的值爲 5 ,可是其右子節點值爲 4 。

思路分析:遞歸htm

由於二叉搜索樹中序遍歷是遞增的,因此咱們能夠中序遍歷判斷前一數是否小於後一個數.blog

代碼實現:遞歸

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    TreeNode preNode=null;
    public boolean isValidBST(TreeNode root) {
        
                if (root == null) {
            return true;
        }
        if (!isValidBST(root.left)) {
            return false;
        }
        if (preNode != null && preNode.val >= root.val) {
            return false;
        }
        preNode = root;
        return isValidBST(root.right);
        
    }
}
  • 時間複雜度 : O(N)。每一個結點訪問一次。
  • 空間複雜度 : O(N)。咱們跟進了整棵樹。
相關文章
相關標籤/搜索