剑指offer 54. 二叉搜索树的第k大节点
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { int res, k; public int kthLargest(TreeNode root, int k) { this.k = k; dfs(root); return res; } void dfs(TreeNode root) { if(root == null) return; dfs(root.right); if(k == 0) return; if(--k == 0) res = root.val; dfs(root.left); } }
|
加了一句 if(k == 0) return; 起到了提前返回的作用,很神奇。
其中我自己想写的话就想为什么要设一个全局变量k呢?为什么不能返回root.val呢? 就像下面这么写。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| static int dfs(TreeNode root) { if(root == null) return 0; dfs(root.right);
if(--k == 0) { res = root.val; return root.val; } dfs(root.left); return 0; }
|
但是试了一下发现,返回root.val并不会结束最外面的dfs,最后还要return 0; 所以return的root.val只是跳出了一次dfs,根本无人记录下来啊。所以这里的return 0也好 return root.val也好都没意义了 和return 没区别。真正起作用的还是全局的res记录了root.val。
最后更新时间: