剑指offer62 寻找二叉搜索树第k个结点

版权声明:转载请标明出处哦 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;
	}

猜你喜欢

转载自blog.csdn.net/easy_purple/article/details/85232014
今日推荐