标签:简单 arch 处理 return 合规 情况 思路 top col
题意:给出头结点,让你判断这颗树是不是二叉搜索树。
思路:
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 };
列出,在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
标签:简单 arch 处理 return 合规 情况 思路 top col
原文地址:https://www.cnblogs.com/yy-1046741080/p/11618105.html