lintcode validate-binary-search-tree 验证二叉查找树

来源:互联网 发布:淘宝贝高瞻幼儿园收费 编辑:程序博客网 时间:2024/05/21 08:36

问题描述

lintcode

笔记

  • 代码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);    }};
0 0
原创粉丝点击