二叉树-二叉搜索树的最小绝对差
力扣链接
class Solution {
public :
int res = INT_MAX;
TreeNode* pre = nullptr ;
void traversal ( TreeNode* cur) {
if ( cur == nullptr ) return ;
traversal ( cur-> left) ;
if ( pre != nullptr ) {
res = min ( res, cur-> val - pre-> val) ;
}
pre = cur;
traversal ( cur-> right) ;
}
int getMinimumDifference ( TreeNode* root) {
traversal ( root) ;
return res;
}
} ;
二叉树-二叉搜索树中的众数
力扣链接
class Solution {
private :
void searchBST ( TreeNode* cur, unordered_map< int , int > & map) {
if ( cur == nullptr ) return ;
map[ cur-> val] ++ ;
searchBST ( cur-> left, map) ;
searchBST ( cur-> right, map) ;
return ;
}
bool static cmp ( const pair< int , int > & a, const pair< int , int > & b) {
return a. second > b. second;
}
public :
vector< int > findMode ( TreeNode* root) {
unordered_map< int , int > map;
vector< int > result;
if ( root == nullptr ) return result;
searchBST ( root, map) ;
vector< pair< int , int >> vec ( map. begin ( ) , map. end ( ) ) ;
sort ( vec. begin ( ) , vec. end ( ) , cmp) ;
result. push_back ( vec[ 0 ] . first) ;
for ( int i = 1 ; i < vec. size ( ) ; i++ ) {
if ( vec[ i] . second == vec[ 0 ] . second) result. push_back ( vec[ i] . first) ;
else break ;
}
return result;
}
} ;
二叉树-二叉树的最近公共祖先
力扣链接
class Solution {
public :
TreeNode* lowestCommonAncestor ( TreeNode* root, TreeNode* p, TreeNode* q) {
if ( root == NULL || root == p || root == q) return root;
TreeNode* left = lowestCommonAncestor ( root-> left, p, q) ;
TreeNode* right = lowestCommonAncestor ( root-> right, p, q) ;
if ( left != NULL && right != NULL ) {
return root;
} else if ( left != NULL && right == NULL ) {
return left;
} else if ( left == NULL && right != NULL ) {
return right;
} else return NULL ;
}
} ;