【面試題 04.05】合法二叉搜索樹

題目

題目鏈接

實現一個函數,檢查一棵二叉樹是否爲二叉搜索樹。

示例 1:

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

示例 2:

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

實現思路

經典題目,考察二叉搜索樹的特點,中序遍歷結果集爲遞增序列,所以只需中序遍歷判斷結果集是否是遞增序列即可。
定義一個遍歷temp保存每次遍歷的節點val值,如果它每次都進行更新也就代表遍歷的是遞增序列,否則不是二叉搜索樹,可以定義個boolean變量作爲不是遞增序列的結束條件。

其中一個重要的點,定位的最小值應該用 Long.MIN_VALUE 具體解釋看代碼

代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    private boolean isbst = true;
    //	解答失敗:
    //			測試用例:[-2147483648]
    //			測試結果:false
    //			期望結果:true
    //Integer的MIN_VALUE 爲-2147483648 不合適 所以替換爲long的MIN_VALUE
    private long temp = Long.MIN_VALUE;

    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        solve(root);
        return isbst;
    }

    public void solve(TreeNode root) {
        if (root == null || !isbst) {
            return;
        }
        solve(root.left);
        if (root.val > temp) {
            temp = root.val;
        } else {
            isbst = false;
        }
        solve(root.right);
    }

}

請輸入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章