LeetCode Validate Binary Search Tree
来源:互联网 发布:手机话费购物软件 编辑:程序博客网 时间:2024/06/06 00:33
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.
Example 1:
2 / \ 1 3
Binary tree [2,1,3]
, return true.Example 2:
1 / \ 2 3
Binary tree [1,2,3]
, return false. Subscribe to see which companies asked this question.
因为BST要求节点的左子树的所有节点必须小于该节点的值,节点的右子树的所有节点必须大于该节点的值,所以进行判断时,需要将当前节点与按中序遍历的序列中的前一个节点进行判断是否符合规范。
1.非递归版本
/** * 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) { if(root == NULL) return true; stack<TreeNode*> result ; TreeNode* pre = NULL; while(root != NULL || !result.empty()) { while(root != NULL) { result.push(root); root = root->left; } root = result.top(); result.pop(); if(pre != NULL && pre->val >= root->val) return false; pre = root; root = root->right; } return true; }};
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 validBST(root,pre); } bool validBST(TreeNode* root,TreeNode* &pre) { if(root == NULL) return true; if(!validBST(root->left,pre)) return false; if(pre != NULL && pre->val >= root->val) return false; pre = root; return validBST(root->right,pre); }};
3.观看别人的代码,发现一个十分有意思的解法
/** * 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 validBST(root, std::numeric_limits<int>::lowest(), std::numeric_limits<int>::max()); } bool validBST(TreeNode* root,long long smallest,long long max) { if(root == NULL) return true; long long val = root->val; if(val < smallest || val > max) return false; return validBST(root->left,smallest,val-1) && validBST(root->right,val+1,max); }};
阅读全文
0 0
- LeetCode: Validate Binary Search Tree
- [Leetcode] Validate Binary Search Tree
- LeetCode : Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree
- [LeetCode] Validate binary search tree
- [LeetCode]Validate Binary Search Tree
- [Leetcode]Validate Binary Search Tree
- [leetcode]Validate Binary Search Tree
- LeetCode-Validate Binary Search Tree
- [leetcode] Validate Binary Search Tree
- LeetCode - Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree
- Leetcode Validate Binary Search Tree
- LeetCode | Validate Binary Search Tree
- LeetCode - Validate Binary Search Tree
- Leetcode: Validate Binary Search Tree
- 【Leetcode】Validate Binary Search Tree
- 【leetcode】Validate Binary Search Tree
- SAP本地测试环境搭建
- 线程安全和线程不安全理解
- 黑光标按键问题
- 准确的说是设置一个由两个字段组成的主键
- 根据name获取drawable的ID
- LeetCode Validate Binary Search Tree
- LeetCode: N-Queens II
- Android打开doc、xlsx、ppt等office文档解决方案
- android adb interface驱动安装
- Eclipse Java注释模板设置详解
- 标记关于C的重新恢复环境
- screenfetch
- android项目目录结构
- 【详细内容】NCS8801 RGB/LVDS转eDP规格书