摘要:題目給定一個(gè)二叉樹,判斷其是否是一個(gè)有效的二叉搜索樹。所有左子樹和右子樹自身必須也是二叉搜索樹。題解這道題目主要是利用二叉搜索樹的一個(gè)性質(zhì)二叉搜索樹的中序遍歷結(jié)果是一個(gè)升序的序列。
題目
給定一個(gè)二叉樹,判斷其是否是一個(gè)有效的二叉搜索樹。
假設(shè)一個(gè)二叉搜索樹具有如下特征:
節(jié)點(diǎn)的左子樹只包含小于當(dāng)前節(jié)點(diǎn)的數(shù)。
節(jié)點(diǎn)的右子樹只包含大于當(dāng)前節(jié)點(diǎn)的數(shù)。
所有左子樹和右子樹自身必須也是二叉搜索樹。
示例 1:
輸入: 2 / 1 3 輸出: true
示例 2:
輸入: 5 / 1 4 / 3 6 輸出: false 解釋: 輸入為: [5,1,4,null,null,3,6]。 根節(jié)點(diǎn)的值為 5 ,但是其右子節(jié)點(diǎn)值為 4 。題解
這道題目主要是利用二叉搜索樹的一個(gè)性質(zhì):
二叉搜索樹的中序遍歷結(jié)果是一個(gè)升序的序列。
那么問題轉(zhuǎn)變成:中序遍歷 + 驗(yàn)證是不是升序.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private ListinPrint(TreeNode root, List res) { if (root != null) { inPrint(root.left, res); res.add(root.val); inPrint(root.right, res); } return res; } public boolean isValidBST(TreeNode root) { List res = inPrint(root, new LinkedList<>()); if (res.size() == 1) { return true; } for (int i = 1; i < res.size(); i++) { if (res.get(i) <= res.get(i - 1)) { return false; } } return true; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73319.html
摘要:小鹿題目驗(yàn)證二叉搜索樹給定一個(gè)二叉樹,判斷其是否是一個(gè)有效的二叉搜索樹。假設(shè)一個(gè)二叉搜索樹具有如下特征節(jié)點(diǎn)的左子樹只包含小于當(dāng)前節(jié)點(diǎn)的數(shù)。所有左子樹和右子樹自身必須也是二叉搜索樹。算法思路定義全局的變量,用來返回是否為二叉搜索樹。 Time:2019/4/24Title: Vaildata Binary Search TreeDifficulty: MediumAuthor: 小鹿 ...
摘要:根據(jù)這個(gè)特征,用二分法來將有序數(shù)組轉(zhuǎn)換為一顆二叉搜索樹。邊界條件向下取整得到中間值遞歸二分法接下來我們驗(yàn)證下一棵樹是否滿足二叉搜索樹。二驗(yàn)證二叉搜索樹相關(guān)題目驗(yàn)證二叉搜索樹中等思路就是,中序遍歷如果滿足遞增的就行。 二叉樹大家都知道,二叉搜索樹滿足以下特征: 節(jié)點(diǎn)的左子樹只包含小于當(dāng)前節(jié)點(diǎn)的數(shù)節(jié)點(diǎn)的右子樹只包含大于當(dāng)前節(jié)點(diǎn)的數(shù) 所有左子樹和右子樹自身必須也是二叉搜索樹 二叉搜索樹也叫...
摘要:也就是說,有個(gè)節(jié)點(diǎn)的平衡二叉搜索樹,它的高度是。以搜索操作為例,如果二叉搜索樹的高度為,則時(shí)間復(fù)雜度為。二叉搜索樹的高度的確很重要。樹集合,中的或者中的,是由高度平衡的二叉搜索樹實(shí)現(xiàn)的。 ...
摘要:有效二叉搜索樹定義如下節(jié)點(diǎn)的左子樹只包含小于當(dāng)前節(jié)點(diǎn)的數(shù)。所有左子樹和右子樹自身必須也是二叉搜索樹。而我們二叉搜索樹保證了左子樹的節(jié)點(diǎn)的值均小于根節(jié)點(diǎn)的值,根節(jié)點(diǎn)的值均小于右子樹的值,因此中序遍歷以后得到的序列一定是升序序列。 ...
摘要:注意這里的結(jié)構(gòu)和不同的二叉樹遍歷一樣,如果到空節(jié)點(diǎn)就返回,否則遞歸遍歷左節(jié)點(diǎn)和右節(jié)點(diǎn)。唯一不同是加入了和,所以要在遞歸之前先判斷是否符合和的條件。代碼如果該節(jié)點(diǎn)大于上限返回假如果該節(jié)點(diǎn)小于下限返回假遞歸判斷左子樹和右子樹 Validate Binary Search Tree Given a binary tree, determine if it is a valid binary...
閱讀 3986·2021-11-23 10:09
閱讀 1347·2021-11-23 09:51
閱讀 2946·2021-11-23 09:51
閱讀 1595·2021-09-07 09:59
閱讀 2359·2019-08-30 15:55
閱讀 2306·2019-08-30 15:55
閱讀 2955·2019-08-30 15:52
閱讀 2568·2019-08-26 17:04