We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent cea509a commit bf6e91eCopy full SHA for bf6e91e
lcof/面试题54. 二叉搜索树的第k大节点/README.md
@@ -40,7 +40,36 @@
40
41
## 解法
42
43
-先遍历右子树,访问根节点,再遍历左子树。遍历到第 k 个结点时,存储结果。
+朴素解法:
44
+
45
+1. 中序遍历,并使用数组存储遍历结果。
46
+2. 遍历结束,返回 `arr[arr.length - k]`。
47
48
+*优化*:
49
50
+其中,只关注**第 k 大节点的值**,可以选择倒序遍历,记录当前遍历节点的数量,当数量为 `k` 时,记录当前节点值做为返回值即可,而无需记录所有的遍历结果。
51
52
+> 中序遍历的顺序是从小到大,倒序的中序遍历便是从大到小。
53
54
+常规中序遍历:
55
56
+```txt
57
+IN-ORDER(R)
58
+ IN-ORDER(R.left)
59
+ print(R.val)
60
+ In-ORDER(R.right)
61
+```
62
63
+倒序中序遍历:
64
65
66
+IN-ORDER-REVERSE(R)
67
+ In-ORDER-REVERSE(R.right)
68
69
+ IN-ORDER-REVERSE(R.left)
70
71
72
+若是抬杠说,可能每次 `k` 都是节点数量,那么倒序就毫无意义并且加长时间消耗。这些情况是无法假设的,如果 `k = 1`,那又该怎么说,选择倒序先得最大值,才是符合题意的精神。
73
74
<!-- tabs:start -->
75
0 commit comments