LeetCode:530.二叉搜索树的最小绝对差
问题描述
解决方案:
1.思路
2.代码实现
class Solution { int pre; int ans; public int getMinimumDifference ( TreeNode root) { ans = Integer . MAX_VALUE ; pre = - 1 ; dfs ( root) ; return ans; } public void dfs ( TreeNode root) { if ( root == null ) { return ; } dfs ( root. left) ; if ( pre == - 1 ) { pre = root. val; } else { ans = Math . min ( ans, root. val - pre) ; pre = root. val; } dfs ( root. right) ; }
}
3.复杂度分析
5.疑问
LeetCode:501.二叉搜索树中的众数
解决方案:
1.思路:
中序遍历+hashMap,考虑优化使用hashMap的时间复杂度; 考虑到二叉搜索树中序遍历的有序性,实现一个update函数,根据记录频率实现众数的记录与更新
首先更新base和base出现的次数count
如果所遍历节点值x=base,那么count+1; 如果不等于base,那么把base加入answer数组,然后令base=x,count=1;
然后更新maxcount
如果count=maxcount,那么说明该该数字出现的次数和已经出现的众数出现的次数一样,就把该数base存入数组answer中; 如果count>maxcount,那么需要将max更新为maxcount。 并情况answer数组,将base加入数组中;
2.代码实现
class Solution { List < Integer > answer = new ArrayList < Integer > ( ) ; int base, count, maxCount; public int [ ] findMode ( TreeNode root) { dfs ( root) ; int [ ] mode = new int [ answer. size ( ) ] ; for ( int i = 0 ; i < answer. size ( ) ; ++ i) { mode[ i] = answer. get ( i) ; } return mode; } public void dfs ( TreeNode T ) { if ( T == null ) { return ; } dfs ( T . left) ; update ( T . val) ; dfs ( T . right) ; } public void update ( int x) { if ( x == base) { ++ count; } else { count = 1 ; base = x; } if ( count == maxCount) { answer. add ( base) ; } if ( count > maxCount) { maxCount = count; answer. clear ( ) ; answer. add ( base) ; } }
}
3.复杂度分析
3.复杂度分析
LeetCode: 236. 二叉树的最近公共祖先
问题描述
解决方案:
1.思路:
后序遍历可以最后处理根节点,相当于记录根节点; 递归终止逻辑是:根节点为空,那么说明不存在p和q;或者p和q其中一个和根节点一致,那么直接返回该根节点即可; 然后进行递归遍历,去获得 如果
2.代码实现
public 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; } return left != null ? left : right; }
}
3.复杂度分析
4.疑惑思考
递归出口是null很重要; 当前节点的左右节点接住了上一层入栈函数的返回函数,返回的是null;