版权声明:转载请标明出处哦 https://blog.csdn.net/easy_purple/article/details/85232014
题目
原题目是:给定一颗二叉搜索树,请找出其中的第k大的结点。
但是,看到网上那么多人给出的答案后,我认为是寻找第k个结点,而不是第k大的节点。
思路
我们知道,二叉搜索树的特点:左子树的节点的值均比父节点小,右子树的节点的值均比父节点的值大。所以,我们中序遍历二叉搜索树,就可以找到第k个节点了。
代码
public static TreeNode findKthNode(TreeNode root, int k) {
TreeNode target = null;
if (root.left != null && target == null) {//必须加上target == null条件,否则会遍历到最后一个节点
target = findKthNode(root.left, k);
}
if (target == null) {
if (k == 1) {
target = root;
} else {
k--;
}
}
if (root.right != null && target == null) {
target = findKthNode(root.right, k);
}
return target;
}