LintCode - 驗證二叉查找樹(中等)

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

難度:入門
要求:

給定一個二叉樹,判斷它是否是合法的二叉查找樹(BST)

一棵BST定義為:

節點的左子樹中的值要嚴格小于該節點的值。
節點的右子樹中的值要嚴格大于該節點的值。
左右子樹也必須是二叉查找樹。
一個節點的樹也是二叉查找樹。

樣例:

一個例子:

  2
 / \
1   4
   / \
  3   5

上述這棵二叉樹序列化為 {2,1,4,#,#,3,5}.

思路:

方法一: 根據定義遞歸驗證
方法二: 二叉查找樹中序遍歷可以得到一個遞增的序列

這里我們實現方法二:

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: True if the binary tree is BST, or false
     */
    public boolean isValidBST(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();

        //遍歷
        inOrder(root, list);

        //校驗
        boolean flag = true;
        int cur = Integer.MIN_VALUE;
        if(list.size() > 0){
            cur = list.get(0);
            list.remove(0);
        }
        for(int i : list){
            if(i <= cur){
                flag = false;
                break;
            }else{
                cur = i;
            }
        }
        return flag;
    }
    
    /**
     * 二叉查找樹中序遍歷可以得到一個遞增的序列
     * 
     **/
    private void inOrder(TreeNode node, List<Integer> list){
        if(node == null){
            return;
        }
        
        inOrder(node.left, list);
        list.add(node.val);
        inOrder(node.right, list);
        return;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 二叉查找樹(Binary Sort Tree) 我們之前所學到的列表,棧等都是一種線性的數據結構,今天我們將學習計...
    Cryptic閱讀 5,041評論 1 19
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,489評論 1 31
  • 參考鏈接 一步一步寫二叉查找樹 二叉查找樹(BST)是二叉樹的一個重要的應用,它在二叉樹的基礎上加上了這樣的一個性...
    夢即是幻閱讀 487評論 0 1
  • 0. 什么是樹 數據的基本單位是數據元素,在涉及到數據處理時數據元素之間的關系稱之為結構,我們依據數據元素之間關系...
    安安zoe閱讀 498評論 0 0
  • -二叉搜索樹 查找問題:靜態查找和動態查找,靜態查找可以用二分查找-判定樹,那么針對動態查找數據如何組織?(樹的動...
    Spicy_Crayfish閱讀 1,395評論 0 2