LeetCode 98. Validate Binary Search Tree
Posted yy-1046741080
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 98. Validate Binary Search Tree相关的知识,希望对你有一定的参考价值。
题意:给出头结点,让你判断这颗树是不是二叉搜索树。
思路:
- 很显然,对于一棵二叉搜索树,其左右子树肯定也是二叉搜索树;
- 因此,递归思路:如果左右子树都是BST,并且该根结点也符合规律(小于左子树的最小结点,小于右子树的最大结点)
- 递归边界:如果是空节点,那么返回true;
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) 8 * ; 9 */ 10 class Solution 11 public: 12 // 得到值最大的结点 13 long long getMore(TreeNode* root) 14 if(root==NULL) 15 return -2333333333; 16 17 else 18 TreeNode* tmp=root; 19 while(tmp->right!=NULL) 20 tmp=tmp->right; 21 22 return tmp->val; 23 24 25 // 得到值最小的结点 26 long long getLess(TreeNode* root) 27 if(root==NULL) 28 return 2333333333; 29 30 else 31 TreeNode* tmp=root; 32 while(tmp->left!=NULL) 33 tmp=tmp->left; 34 35 return tmp->val; 36 37 38 39 bool isValidBST(TreeNode* root) 40 if(root==NULL) 41 return true; 42 43 long long v1=getMore(root->left); 44 long long v2=getLess(root->right); 45 return v1<root->val && v2>root->val && isValidBST(root->left) && isValidBST(root->right); 46 47 ;
- 我在实现的时候偷了一点懒;因为对于树结点val属性,在int的范围之内;因此我就使用long long和超过int范围的数来处理左右子树为空的情况(因为为空,肯定是符合二叉排序树的情况!)。
列出,在leetcode中,效率最高的代码:
思路很简单,BST的特点在于中序遍历是递增顺序的,因此使用非递归中序遍历,边遍历,边判断;如果中途发现不对,直接返回;
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) 8 * ; 9 */ 10 class Solution 11 public: 12 bool isValidBST(TreeNode* root) 13 stack<TreeNode*> s; 14 int pre = INT_MAX; 15 int f = 0; 16 while(!s.empty() || root) 17 18 while(root) 19 20 s.push(root); 21 root = root->left; 22 23 root = s.top(); 24 s.pop(); 25 if(f && root->val <= pre) 26 return false; 27 pre = root->val; 28 f++; 29 root = root->right; 30 31 return true; 32 33 34 ;
以上是关于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