LeetCode530. 二叉搜索树的最小绝对差
class Solution {
public :
int getMinimumDifference ( TreeNode* root) {
vector< int > array;
TreeNode* cur = root;
stack< TreeNode* > s;
int result = INT_MAX;
while ( cur || ! s. empty ( ) ) {
while ( cur) {
s. push ( cur) ;
cur = cur-> left;
}
cur = s. top ( ) ;
s. pop ( ) ;
array. push_back ( cur-> val) ;
cur = cur-> right;
}
for ( int i = 0 ; i < array. size ( ) - 1 ; i++ ) {
result = min ( array[ i + 1 ] - array[ i] , result) ;
}
return result;
}
} ;
LeetCode501.二叉搜索树的众数
class Solution {
public :
vector< int > findMode ( TreeNode* root) {
TreeNode* cur = root;
stack< TreeNode* > s;
vector< int > array, result;
int numTimes = 0 , maxTimes = INT_MIN, nowNum;
while ( cur || ! s. empty ( ) ) {
while ( cur) {
s. push ( cur) ;
cur = cur-> left;
}
cur = s. top ( ) ;
s. pop ( ) ;
array. push_back ( cur-> val) ;
cur = cur-> right;
}
nowNum = array[ 0 ] ;
for ( int i = 0 ; i < array. size ( ) ; i++ ) {
if ( array[ i] == nowNum) {
numTimes++ ;
}
if ( array[ i] != nowNum) {
if ( numTimes == maxTimes) {
result. push_back ( nowNum) ;
} else if ( numTimes > maxTimes) {
result. clear ( ) ;
result. push_back ( nowNum) ;
maxTimes = numTimes;
}
numTimes = 1 ;
nowNum = array[ i] ;
}
if ( i == array. size ( ) - 1 ) {
if ( numTimes == maxTimes) {
result. push_back ( nowNum) ;
} else if ( numTimes > maxTimes) {
result. clear ( ) ;
result. push_back ( nowNum) ;
maxTimes = numTimes;
}
}
}
return result;
}
} ;
LeetCode236.二叉树最近公共祖先
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 left;
if ( left == NULL && right != NULL ) return right;
if ( left != NULL && right != NULL ) return root;
return NULL ;
}
} ;