1. 程式人生 > >LeetCode:驗證二叉搜尋樹【98】

LeetCode:驗證二叉搜尋樹【98】

LeetCode:驗證二叉搜尋樹【98】

題目描述

給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。

假設一個二叉搜尋樹具有如下特徵:

  • 節點的左子樹只包含小於當前節點的數。
  • 節點的右子樹只包含大於當前節點的數。
  • 所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例 1:

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

示例 2:

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

題目分析

  二叉搜尋樹的中序遍歷結果遞增。我們只需要寫一箇中序遍歷然後看一下結果是否遞增即可。

  其實我們也不需要把中序遍歷結果全部弄出來,我們可以在遞迴的過程中,實時地比較當前元素和前一個元素的大小值關係,如果出現小於等於,則不是搜尋樹

 

Java題解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isValidBST(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        inorder(root,list);
        for(int i=0;i<list.size()-1;i++)
            if(list.get(i)>=list.get(i+1))
                return false;
        return true;
    }

    public void inorder(TreeNode node,List<Integer> list)
    {
        if(node==null)
            return;
        inorder(node.left,list);
        list.add(node.val);
        inorder(node.right,list);
    }
}