LintCode 97 驗證二叉查詢樹
http://www.lintcode.com/zh-cn/problem/validate-binary-search-tree/
給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST)
一棵BST定義為:
- 節點的左子樹中的值要嚴格小於該節點的值。
- 節點的右子樹中的值要嚴格大於該節點的值。
- 左右子樹也必須是二叉查詢樹。
- 一個節點的樹也是二叉查詢樹。
一個例子:
2
/ \
1 4
/ \
3 5
上述這棵二叉樹序列化為 {2,1,4,#,#,3,5}
.
方法:利用中序遍歷是否遞增來判斷
C++程式碼
class Solution { public: void inorder(TreeNode *root ,vector<int> &res) { if(root == NULL) return; inorder(root->left,res); res.push_back(root->val); inorder(root->right,res); } bool isValidBST(TreeNode*root) { vector<int> res; if(!root) return true; inorder(root,res); for(int i = 0;i <res.size()-1;i++) { if(res[i] >= res[i+1]) return false; } return true; } };
Python程式碼
def isValidBST(self, root):
# write your code here
if not root:
return True
return self._isValidBST(root.left,root.val,None)and \
self._isValidBST(root.right,None,root.val)
def _isValidBST(self,root,lmax,rmin):
if not root:
return True
if lmax and (root.val >=lmax):
return False
if rmin and (root.val <= rmin):
return False
return self._isValidBST(root.left,root.val,rmin)and\
self._isValidBST(root.right,lmax,root.val)
相關推薦
LintCode 97 驗證二叉查詢樹
題目 http://www.lintcode.com/zh-cn/problem/validate-binary-search-tree/ 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST)
lintcode(95)驗證二叉查詢樹
描述: 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。節點的右子樹中的值要嚴格大於該節點的值。左右子樹也必須是二叉查詢樹。一個節點的樹也是二叉查詢樹。樣例: 一個例子: 2 / \ 1
【兩次過】Lintcode 95. 驗證二叉查詢樹
給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。 節點的右子樹中的值要嚴格大於該節點的值。 左右子樹也必須是二叉查詢樹。 一個節點的樹也是二叉查詢樹。 樣例 一個例子: 2 / \ 1
[LintCode]95.驗證二叉查詢樹(二叉排序樹/二叉搜尋樹) 中序遍歷
給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。節點的右子樹中的值要嚴格大於該節點的值。左右子樹也必須是二叉查詢樹。一個節點的樹
lintcode validate-binary-search-tree 驗證二叉查詢樹
問題描述 筆記 程式碼1是用到中序遍歷,要求中序遍歷是嚴格的增序。用到了輔助空間。 程式碼2是leetcode上面的解法,用到了prev指標記錄前一個節點,省下了輔助空間,而且要注意prev傳
驗證二叉查詢樹—LintCode
描述: 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。 節點的右子樹中的值要嚴格大於該節點的值。 左右子樹也必須是二叉查詢
LintCode:驗證二叉查詢樹
如果是二叉查詢樹,那麼其中序遍歷是上升序列。 """ Definition of TreeNode: class TreeNode: def __init__(self, val):
Leetcode 98 Validate Binary Search Tree 驗證二叉查詢樹
題目描述 Given a binary tree, determine if it is a valid binary search tree (BST). 給出一個二叉樹,判斷其是否是合法的二叉查詢樹。 解題思路 首先,我們來看二叉查詢樹的
【LeetCode】Validate Binary Search Tree 驗證二叉查詢樹
驗證二叉查詢樹 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。 節點的右子樹中的值要嚴格大於該節點的值。 左右子樹也必須是二叉查詢樹。 一個節點的樹也是二叉查詢樹。 樣例
LintCode-不同的二叉查詢樹
給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種? 樣例 給出n = 3,有5種不同形態的二叉查詢樹: 1 3 3 2 1 \ / / / \ \ 3
lintcode-不同的二叉查詢樹-163
給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種? 您在真實的面試中是否遇到過這個題? 樣例 給出n = 3,有5種不同形態的二叉查詢樹: 1 3 3
95. 驗證二叉查詢樹(熟練二叉查詢樹的性質)
給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST)一棵BST定義為:節點的左子樹中的值要嚴格小於該節點的值。節點的右子樹中的值要嚴格大於該節點的值。左右子樹也必須是二叉查詢樹。一個節點的樹也是二叉查詢樹。樣例一個例子: 2 / \ 1 4 / \ 3
驗證二叉查詢樹
二叉查詢樹 給定一個二叉樹,判斷它是否是合法的二叉查詢樹(BST) 一棵BST定義為: 節點的左子樹中的值要嚴格小於該節點的值。 節點的右子樹中的值要嚴格大於該節點的值。 左右子樹也必須是二叉查詢樹。 因為二叉查詢樹的中序遍歷是有序的。所以驗證是否為
LintCode:M-二叉查詢樹中搜索區間
給定兩個值 k1 和 k2(k1 < k2)和一個二叉查詢樹的根節點。找到樹中所有值在 k1 到 k2 範圍內的節點。即列印所有x (k1 <= x <= k2) 其中 x 是二叉查詢樹的中的節點值。返回所有升序的節點值。
【一次過】Lintcode 86. 二叉查詢樹迭代器
設計實現一個帶有下列屬性的二叉查詢樹的迭代器: next()返回BST中下一個最小的元素 元素按照遞增的順序被訪問(比如中序遍歷) next()和hasNext()的詢問操作要求均攤時間複雜度是O(1) 樣例 對於下列二叉查詢樹,使用迭代器進行中序遍歷的結果為&nbs
不同的二叉查詢樹 II lintcode
給出n,生成所有由1...n為節點組成的不同的二叉查詢樹 您在真實的面試中是否遇到過這個題? Yes 樣例 給出n = 3,生成所有5種不同形態的二叉查詢樹: 1
LintCode 11. 二叉查詢樹中搜索區間 Python
描述 給定兩個值 k1 和 k2(k1 < k2)和一個二叉查詢樹的根節點。找到樹中所有值在 k1 到 k2 範圍內的節點。即列印所有x (k1 <= x <= k2) 其中 x 是二叉查詢樹的中的節點值。返回所有升序的節點值。 樣例 如果有 k1 = 10 和
LintCode:M-不同的二叉查詢樹個數
給出 n,問由 1...n 為節點組成的不同的二叉查詢樹有多少種? 您在真實的面試中是否遇到過這個題? Yes 樣例 給出n = 3,有5種不同形態的二叉查詢樹: 1 3 3 2 1 \
lintcode:不同的二叉查詢樹
卡特蘭數 其前幾項為 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845
不同的二叉查詢樹 II -LintCode
給出n,生成所有由1…n為節點組成的不同的二叉查詢樹 樣例 給出n = 3,生成所有5種不同形態的二叉查詢樹: #ifndef C164_H #define C164_H #include