验证二叉查找树-LintCode

来源:互联网 发布:js反格式化工具 编辑:程序博客网 时间:2024/06/06 07:50

给定一个二叉树,判断它是否是合法的二叉查找树(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
原创粉丝点击