Day21
今日任务
530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数
二叉树的最近公共祖先
代码实现
int min = Integer . MAX_VALUE ;
TreeNode pre = null ;
public int getMinimumDifference ( TreeNode root) {
getMin ( root) ;
return min;
}
public void getMin ( TreeNode cur) {
if ( cur == null ) return ;
getMin ( cur. left) ;
if ( pre != null ) {
min = Math . min ( min, Math . abs ( pre. val - cur. val) ) ;
}
pre = cur;
getMin ( cur. right) ;
}
public List < Integer > result;
public int count;
public int maxCount;
public int [ ] findMode ( TreeNode root) {
if ( root == null ) return null ;
result = new ArrayList < > ( ) ;
count = 0 ;
maxCount = 0 ;
traversal ( root) ;
return result. stream ( ) . mapToInt ( i -> i) . toArray ( ) ;
}
public void traversal ( TreeNode cur) {
if ( cur == null ) return ;
traversal ( cur. left) ;
if ( pre != null ) {
if ( pre. val != cur. val) {
count = 1 ;
} else {
count++ ;
}
} else {
count = 1 ;
}
if ( count > maxCount) {
result. clear ( ) ;
maxCount = count;
result. add ( cur. val) ;
} else if ( count == maxCount) {
result. add ( cur. val) ;
}
pre = cur;
traversal ( cur. right) ;
}
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;
if ( left != null ) return left;
if ( right != null ) return right;
return null ;
}
今日总结
对二叉树的递归还没有真正理解,或者说对于递归还没有真正理解,通过递归,可以做到在遍历二叉树的时候先处理下边的元素,再处理上边的元素,这很重要,同时也是前序中序后序三种遍历不同的点; 状态不好,太困了,第一道题想了一下没写出来,又陷入昨天的循环,还是没有完全理解二叉搜索树中的双指针,第二题小技巧很难想到,第三题更不用说,看完也不知道怎么能想到; 股票今天小红1.76,假如每天能红1个点,这个月就回本了