leetcode-98 Validate Binary Search Tree
2015-03-31 19:25
351 查看
思路:BST的中序遍历为一个有序序列,所以可以通过中序遍历来解此题。但需要注意的是,当弹出第一个结点时,它的值不需要和谁进行比较,所以大部分人选择将prev变量的初值设为INT_MIN,但如果弹出的第一个结点的值也为INT_MIN的时候,程序就会出错;所以更好的方法是设置一个标志flag,第一次的时候不需要比较。
中序非递归:
递归的版本(或者将prev定义为全局变量):
附加:
当题目涉及到求最大最小值时,最初的比较数字就应当设置为INT_MAX或INT_MIN,更为安全。
<limits.h>中有INT_MAX和INT_MIN的宏定义可直接使用。
或者自行定义宏
#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
INT_MAX = 2147483647
INT_MIN = -2147483648
这仅试用在没有限制范围的情况下使用。
否则同样会出现其他连锁的错误。
中序非递归:
<span style="font-family:Microsoft YaHei;font-size:14px;">/** * Definition for binary tree * 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) return true; stack<TreeNode *> st; st.push(root); int prev,curr; int flag = true; while(!st.empty()){ while(st.top()){ st.push(st.top()->left); } st.pop(); if(!st.empty()){ TreeNode *tmp = st.top(); curr = tmp->val; st.pop(); st.push(tmp->right); if(flag == true) { flag = false; prev = curr; continue; } if(curr <= prev) return false; prev = curr; } } return true; } };</span>
递归的版本(或者将prev定义为全局变量):
<span style="font-family:Microsoft YaHei;">bool helper(struct TreeNode *node,struct TreeNode **prev){ if(node == NULL) return true; if(helper(node->left,prev)){ if(*prev != NULL && (*prev)->val >= node->val) return false; *prev = node; return helper(node->right,prev); } return false; } bool isValidBST(struct TreeNode *root) { struct TreeNode *prev = NULL; return helper(root,&prev); }</span>
附加:
当题目涉及到求最大最小值时,最初的比较数字就应当设置为INT_MAX或INT_MIN,更为安全。
<limits.h>中有INT_MAX和INT_MIN的宏定义可直接使用。
或者自行定义宏
#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
INT_MAX = 2147483647
INT_MIN = -2147483648
这仅试用在没有限制范围的情况下使用。
否则同样会出现其他连锁的错误。
相关文章推荐
- [Leetcode 76] 98 Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree(Python详解及实现)
- Leetcode 98,Validate Binary Search Tree
- leetcode98~Validate Binary Search Tree
- leetcode || 98、Validate Binary Search Tree
- [LeetCode] 98 Validate Binary Search Tree
- leetcode(98). Validate Binary Search Tree
- leetcode question 98:Validate Binary Search Tree
- [Leetcode 98] Validate Binary Search Tree
- leetCode 98-Validate Binary Search Tree
- LeetCode 98: Validate Binary Search Tree
- LeetCode98—Validate Binary Search Tree
- Leetcode 98 Validate Binary Search Tree
- LeetCode 98 Validate Binary Search Tree
- leetCode 98:Validate Binary Search Tree
- [leetcode] 98 Validate Binary Search Tree
- LeetCode98 Validate Binary Search Tree
- Leetcode-98: Validate Binary Search Tree
- LeetCode(98) Validate Binary Search Tree
- LeetCode 98: Validate Binary Search Tree