树结构
- 栈, 如果善于利用栈来处理树结构, 那么可以写出更简洁的代码, 根本不需要 recuresiveFn 这种方法.
- 泛型, 如果善于利用泛型, 那么可以写出更通用的代码,而不是耦合于某一种类型。算法复杂度, 这段代码的时间复杂度是 N*N , 典型的暴力算法
- 代码结构, 写这段代码的人, 虽然有“拆分冗长逻辑为一个方法“ 的意识, 但是, 就其解决的问题而言, 代码可以更简洁.
- 命名,TreeUtil 是一个很“泛”的命名, 可是其内容中的 MenuTreeObject 却很“具体 ”, 两个 “域” 不匹配. (封面与内容不匹配)
第一版是时间复杂度 O(N^2) 的版本
1 |
|
第二版利用动态规划的思想, 分解出“自顶向下构建树”的子问题:“给定一个节点,其子节点有哪些”。只需一次遍历,缓存每一个节点的 父子关系 ,即可得到每个节点,对于这个子问题的结果。之后便可以自顶向下地构建树。 在构建过程中,每处理一个节点,都是直接从缓存取其子节点,没有重复计算(不需要重复访问不相关的节点),复杂度从平方级降为线性。
1 |
|
测试代码
1 |
|
1 |
|
树结构
https://vaughnn.github.io/posts/270c6601/