75:Validate Binary Search Tree
来源:互联网 发布:淘宝坡跟女鞋 编辑:程序博客网 时间:2024/06/05 18:58
题目:Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
• The left subtree of a node contains only nodes with keys less than the node’s key.
• The right subtree of a node contains only nodes with keys greater than the node’s key.
• Both the left and right subtrees must also be binary search trees.
解析1:利用中序遍历,判断遍历前一个元素的值是否小于后一个元素的值,如果出现了大于等于的情况,则返回 false
代码如下:
// 时间复杂度 O(n),空间复杂度 O(log n)class Solution {public: bool isValidBST(TreeNode* root) { stack<TreeNode*> s; TreeNode *cur = root, *prev = nullptr; // 借助于栈的中序遍历,核对前一个结点的元素值 // 是否比后一个结点的元素值小 // 当然也可以采用 Morris 中序遍历 while (!s.empty() || cur) { if (cur) { s.push(cur); cur = cur -> left; } else { cur = s.top(), s.pop(); if (prev) { if(prev -> val >= cur -> val) return false; } prev = cur; cur = cur -> right; } } return false; }};
解析2:解析2 的方法参考了网址https://github.com/soulmachine/leetcode#leetcode题解题目, 该代码思想很好,但不能在 leetcode 中通过,因为树中的元素也有可能为 INT_MAX
或 INT_MIN
代码如下:
// 时间复杂度 O(n),空间复杂度 O(log n)// 该代码思想很好,但在 leetcode 中无法通过class Solution {public: bool isValidBST(TreeNode* root) { return isValidBST(root, INT_MIN, INT_MAX); } // 该方法有一个瑕疵就是如果 root -> val 为 INT_MAX 或者 // 为 INT_MIN 时,该代码就为错误代码 bool isValidBST(TreeNode* root, int lower, int upper) { if(!root) return true; if (root-> val < upper && root-> val > lower) return isValidBST(root -> left, lower, root -> val) && isValidBST(root -> right, upper, root -> val); else return false; }};
0 0
- 75:Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- Validate Binary Search Tree
- 激活IntelliJ IDEA Ultimate 2016
- Eclipse中如何快速查看jar包中 的class源码
- CCF CSP 最优配餐 BFS
- 自动类型转换与强制转换
- 【剑指offer】面试题20:顺时针打印矩阵
- 75:Validate Binary Search Tree
- C++中的explicit关键字
- 什么时候使用redis
- 【3.7】
- Mybatis-mybatis开发结构及讲解
- Opencv图像处理坐标系认识
- Google Speech API
- EFLAGS寄存器
- WebDriver的工作原理