235(最近公共祖先)
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if (root==NULL) return 0; if(p->val<root->val&&q->val<root->val) return lowestCommonAncestor(root->left,p,q); if(p->val>root->val&&q->val>root->val) return lowestCommonAncestor(root->right,p,q); return root; } };
236(任意二叉树,不是二叉搜索树)
98(验证是否为二叉搜索树)
法一:直接采用自身性质,左<中<右
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isValidBST(TreeNode* root) { return isValidBST(root,LONG_MIN,LONG_MAX); } bool isValidBST(TreeNode *root,long mn,long mx){ if(!root) return true; if(root->val<=mn||root->val>=mx) return false; return isValidBST(root->left,mn,root->val)&&isValidBST(root->right,root->val,mx); } };
法二:采用中序遍历来验证
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isPre = false; int pre = -1; bool isValidBST(TreeNode* root) { return inOrder(root); } bool inOrder(TreeNode* node){ if(node == NULL) return true; if(!inOrder(node->left)) return false; if(isPre && pre >= node->val) return false; isPre = true; pre = node->val; if(!inOrder(node->right)) return false; return true; } };
450
108
230
236(任意二叉树,不是二叉搜索树)