A
描述: 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。
思路: 逐级向下对比,找到最后1个叶子结点,然后在叶子结点下一层插入即可。
这种思路下插入可能导致左右子树的不平衡,可以考虑平衡二叉树的插入。
R
可能导致多次布局的情况:
- 有
layout_weight的 LinearLayout 要对每个子 view 测量 2 次。 - 有
weights或者fill gravity的 GridLayout 会失去预处理的好处。 - RelativeLayout 至少要 2 次。
优化布局有如下方法:
重用布局
使用 <include> 是很常见的作法,但可能导致不必要的嵌套。
使用 <merge> 标签可以避免这种嵌套,并且通过 tools:parentTag 属性指明父 ViewGroup 的布局,这样在编辑器中的 UI 可以看上去像是包含在指定的 ViewGroup 中一样。
选择合适的布局
- 复杂时 -> ConstraintLayout
- 垂直/水平连续元素 -> LinearLayout
- 视图之间可以叠加覆盖 -> FrameLayout
- 避免使用 RelativeLayout
延迟加载 view
只在满足条件时才展示的 view ,可以使用 ViewStub 来延迟加载。
ViewStub是1个轻量级 view ,不绘制或参与布局。
加载时通过调用 setVisibility(View.VISIBLE) 或 inflate() 即可。
T
android ktx 中 androidx.core.animation 的方法:
inline fun Animator.addListener(
crossinline onEnd: (animator: Animator) -> Unit = {},
crossinline onStart: (animator: Animator) -> Unit = {},
crossinline onCancel: (animator: Animator) -> Unit = {},
crossinline onRepeat: (animator: Animator) -> Unit = {}
): AnimatorListener
可以简化对动画的监听设置。
S
没时间写……