1. 程式人生 > >LintCode 97 驗證二叉查詢樹

LintCode 97 驗證二叉查詢樹

題目

http://www.lintcode.com/zh-cn/problem/validate-binary-search-tree/

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

一棵BST定義為:

  • 節點的左子樹中的值要嚴格小於該節點的值。
  • 節點的右子樹中的值要嚴格大於該節點的值。
  • 左右子樹也必須是二叉查詢樹。
  • 一個節點的樹也是二叉查詢樹。
您在真實的面試中是否遇到過這個題?  Yes 樣例

一個例子:

  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