lintcode validate-binary-search-tree 驗證二叉查詢樹
阿新 • • 發佈:2018-12-31
問題描述
筆記
- 程式碼1是用到中序遍歷,要求中序遍歷是嚴格的增序。用到了輔助空間。
- 程式碼2是leetcode上面的解法,用到了prev指標記錄前一個節點,省下了輔助空間,而且要注意prev傳進去還應該是引用。
程式碼1
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
bool isValidBST(TreeNode *root) {
// write your code here
vector<int> res;
res.clear();
Inorder(root, res);
if (res.empty() || res.size() == 1)
return true;
for (int i = 0; i < res.size() - 1; i++)
{
if (res[i] >= res[i+1])
return false;
}
return true;
}
void Inorder(TreeNode *root, vector<int> &res)
{
if (root == NULL)
return;
Inorder(root->left, res);
res.push_back(root->val);
Inorder(root->right, res);
}
};
程式碼2
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isValidBST(TreeNode* root)
{
TreeNode *pre = NULL;
return validate(root, pre);
}
bool validate(TreeNode *root, TreeNode *&pre)
{
if (root == NULL)
return true;
if (!validate(root->left, pre))
return false;
if (pre != NULL && pre->val >= root->val)// 如果當前還是NULL那就先不管吧,繼續往下執行。
return false;
pre = root;
return validate(root->right, pre);
}
};