diff --git a/大厂刷题班/class14/Code03_BiggestBSTTopologyInTree.java b/大厂刷题班/class14/Code03_BiggestBSTTopologyInTree.java index 7abce6c..8a3118a 100644 --- a/大厂刷题班/class14/Code03_BiggestBSTTopologyInTree.java +++ b/大厂刷题班/class14/Code03_BiggestBSTTopologyInTree.java @@ -67,11 +67,19 @@ public class Code03_BiggestBSTTopologyInTree { while (tmp < h && record[tmp] != 0) { tmp = tree[tmp][2]; } + // 不用沿途修改所有节点的记录了 + // 因为再往上遍历的节点,边界最多包括当前的头节点 + 左孩子 + 一直往左 + // 所以只需要修改左孩子的边界即可 + // 也就是说,从当前节点的左孩子的右孩子开始,一直往右的所有点都不会再遇到了 record[l] -= record[tmp]; tmp = r; while (tmp > h && record[tmp] != 0) { tmp = tree[tmp][1]; } + // 不用沿途修改所有节点的记录了 + // 因为再往上遍历的节点,边界最多包括当前的头节点 + 右孩子 + 一直往左 + // 所以只需要修改右孩子的边界即可 + // 也就是说,从当前节点的右孩子的左孩子开始,一直往左的所有点都不会再遇到了 record[r] -= record[tmp]; record[h] = record[l] + record[r] + 1; return Math.max(Math.max(p1, p2), record[h]);