1. 程式人生 > >劍指offer62 尋找二叉搜尋樹第k個結點

劍指offer62 尋找二叉搜尋樹第k個結點

題目

原題目是:給定一顆二叉搜尋樹,請找出其中的第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;
	}