[leetcode刷题系列]Validate Binary Search Tree
2013-08-11 01:50
351 查看
- - 嗯, 按照定义来就好了
====我是分割线=====
下面是9-27号写的morris版本,这个问题re了一下午,十分费解。后来我拿Recover Binary Search Tree这个题目的代码直接判断不合法对数是否大于0就可以了,然后想了下区别。发现原来是之前的代码在发现答案为否定的情况下就直接return了。
导致二叉树结构被破坏了。于是系统的代码自己跑的时候就re了,反馈出来的结果就是我的代码re了,囧。 所以用morris的情况切记一定要保证跑完之后树的结构没有被破坏。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { bool dfs(TreeNode * root, int in, int ax){ if(root->val < in || root->val > ax) return false; if(root->left != 0) if(!dfs(root->left, in, root->val - 1)) return false; if(root->right != 0) if(!dfs(root->right, root->val + 1, ax)) return false; return true; } public: bool isValidBST(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function return root == 0 || dfs(root, INT_MIN, INT_MAX); } };
====我是分割线=====
下面是9-27号写的morris版本,这个问题re了一下午,十分费解。后来我拿Recover Binary Search Tree这个题目的代码直接判断不合法对数是否大于0就可以了,然后想了下区别。发现原来是之前的代码在发现答案为否定的情况下就直接return了。
导致二叉树结构被破坏了。于是系统的代码自己跑的时候就re了,反馈出来的结果就是我的代码re了,囧。 所以用morris的情况切记一定要保证跑完之后树的结构没有被破坏。
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function bool ret = true; int pre_val = INT_MIN; TreeNode * cur = root; while(cur != 0){ if(cur->left == 0){ if(cur->val <= pre_val) ret = false; pre_val = cur->val; cur = cur->right; }else{ TreeNode * pre_node = cur->left; while(pre_node->right != 0 && pre_node->right != cur){ pre_node = pre_node->right; } if(pre_node->right == 0){ pre_node->right = cur; cur = cur->left; }else{ // visit if(cur->val <= pre_val) ret = false; pre_val = cur->val; pre_node->right = 0; cur = cur->right; } } } return ret; } };
相关文章推荐
- 二叉树系列 - 二叉搜索树 - [LeetCode] 中序遍历中利用 pre节点避免额外空间。题:Recover Binary Search Tree,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 - 98.Validate Binary Search Tree
- Leetcode: Validate Binary Search Tree
- [LeetCode] Validate Binary Search Tree
- LeetCode-98.Validate Binary Search Tree
- LeetCode-98. Validate Binary Search Tree
- leetCode 98:Validate Binary Search Tree
- leetcode: Validate Binary Search Tree
- [leetcode] Validate Binary Search Tree
- 开始刷题leetcode day37:Validate Binary Search Tree
- [leetcode]Validate Binary Search Tree
- [LeetCode]98. Validate Binary Search Tree
- 【LeetCode-面试算法经典-Java实现】【098-Validate Binary Search Tree(验证二叉搜索树)】