给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
- 节点的左子树中的值要严格小于该节点的值。
- 节点的右子树中的值要严格大于该节点的值。
- 左右子树也必须是二叉查找树。
- 一个节点的树也是二叉查找树。
样例:
一个例子:
2
/ \
1 4
/ \
3 5
上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.
思路:
对于二叉查找树进行中序遍历,将元素依次存入vector,
得到升序序列。如果元素并不是升序序列,则不是二叉查找树。
#ifndef C95_H
#define C95_H
#include<iostream>
#include<vector>
using namespace std;
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;
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);
}
};
#endif