530、二叉搜索树的最小绝对差
递归法:
class Solution {
public:vector<int> vec;void traversal(TreeNode* root) {if(root == NULL) return;traversal(root->left);vec.push_back(root->val);traversal(root->right);}int getMinimumDifference(TreeNode* root) {traversal(root);if(vec.size() < 2) return 0;int res = INT_MAX;for(int i = 0; i < vec.size()-1; i++) {int dif = vec[i+1] - vec[i];if(dif < res) {res = dif;}}return res;}
};
迭代法:
class Solution {
public:int getMinimumDifference(TreeNode* root) {if(root == NULL) return 0;vector<int> vec;stack<TreeNode*> sta; TreeNode* cur = root;while(cur != NULL || !sta.empty()) {while(cur != NULL) {sta.push(cur);cur = cur->left;}cur = sta.top();sta.pop();vec.push_back(cur->val);cur = cur->right;}if(vec.size() < 2) return 0;int res = INT_MAX;for(int i = 0; i < vec.size()-1; i++) {int dif = vec[i+1] - vec[i];if(dif < res) {res = dif;}}return res;}
};
501、二叉搜索树中的众数
递归法:
class Solution {
public:int maxCount = 0;int count = 0;vector<int> vec;TreeNode* pre = NULL;void traversal(TreeNode* root) {if(root == NULL) return;traversal(root->left);if(pre != NULL && pre->val == root->val) {count++;}else {count = 1;}pre = root;if(count == maxCount) {vec.push_back(pre->val);}else if(count > maxCount) {vec.clear();vec.push_back(pre->val);maxCount = count;}traversal(root->right);}vector<int> findMode(TreeNode* root) {if(root == NULL) return vec;traversal(root);return vec;}
};
236、二叉树的最近公共祖先
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == p || root == q || root == NULL) return root;TreeNode* left = lowestCommonAncestor(root->left, p, q);TreeNode* right = lowestCommonAncestor(root->right, p, q);if(left != NULL && right != NULL) return root;if(left == NULL && right != NULL) return right;if(left != NULL && right == NULL) return left;return NULL;}
};