LeetCode:驗證二叉搜尋樹【98】
阿新 • • 發佈:2018-11-14
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); } }