leetcode-98 Validate Binary Search Tree
来源:互联网 发布:mac os x 10.7 .2 iso 编辑:程序博客网 时间:2024/05/24 04:47
思路:BST的中序遍历为一个有序序列,所以可以通过中序遍历来解此题。但需要注意的是,当弹出第一个结点时,它的值不需要和谁进行比较,所以大部分人选择将prev变量的初值设为INT_MIN,但如果弹出的第一个结点的值也为INT_MIN的时候,程序就会出错;所以更好的方法是设置一个标志flag,第一次的时候不需要比较。
中序非递归:
<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
这仅试用在没有限制范围的情况下使用。
否则同样会出现其他连锁的错误。
0 0
- LeetCode 98: 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
- leetcode-98 Validate Binary Search Tree
- leetCode 98-Validate Binary Search Tree
- leetcode || 98、Validate Binary Search Tree
- Leetcode NO.98 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(c++)
- leetcode 98: 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
- 第四周 阅读程序
- Remove Duplicates from Sorted List
- Ember.js 入门指南 (一)
- python 之文件操作
- 学会成长
- leetcode-98 Validate Binary Search Tree
- 缓存算法和缓存策略的介绍
- mysql建表示例 与 从ecshop的category表中扒取数据
- IBM黑衣小组
- Ubantu修改环境变量
- sscanf()总结
- String、StringBuffer、StringBuilder的区别
- thinkphp 邮件发送
- 面试题[后缀数组]: 最长重复子串