1. 程式人生 > 其它 >98. 驗證二叉搜尋樹——Java實現

98. 驗證二叉搜尋樹——Java實現

技術標籤:Leetcodejavaleetcode

題目描述:

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

假設一個二叉搜尋樹具有如下特徵:
節點的左子樹只包含小於當前節點的數。
節點的右子樹只包含大於當前節點的數。
所有左子樹和右子樹自身必須也是二叉搜尋樹。

示例 1:
輸入:
在這裡插入圖片描述
輸出: true

示例 2:
輸入:
在這裡插入圖片描述
輸出: false
解釋: 輸入為: [5,1,4,null,null,3,6]。
根節點的值為 5 ,但是其右子節點值為 4 。

Java程式碼:

核心程式碼:

	List<Integer> res = new ArrayList<Integer>
(); public boolean isValidBST(TreeNode root) { if(root ==null) return true; inorder(root, res); for(int i=0; i<res.size()-1; i++){ if(res.get(i)>=res.get(i+1)) return false; } return true; } public
void inorder(TreeNode root, List<Integer> res){ if(root == null) return; inorder(root.left, res); res.add(root.val); inorder(root.right, res); }

全部程式碼:

package com.renxia;

import java.util.ArrayList;
import java.util.List;

public class nineEight
{ public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } } private static List<Integer> res = new ArrayList<Integer>(); public static boolean isValidBST(TreeNode root) { if(root ==null) return true; inorder(root, res); for(int i=0; i<res.size()-1; i++){ if(res.get(i)>=res.get(i+1)) return false; } return true; } public static void inorder(TreeNode root, List<Integer> res){ if(root == null) return; inorder(root.left, res); res.add(root.val); inorder(root.right, res); } public static void main(String[] args) { TreeNode node1 = new TreeNode(1); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNode(4); TreeNode node5 = new TreeNode(5); TreeNode node6 = new TreeNode(6); node5.left = node1; node5.right = node4; node4.left = node3; node4.right = node6; System.out.println(isValidBST(node5)); } }

執行結果:

【以示例2為參考】
在這裡插入圖片描述