我想在BST中找到K個最大的元素,但是我的代碼流沒有正確地發生。例如,考慮BST如下在二叉搜索樹中查找K個最大的元素
9
/ \
7 12
/\/ \
6 10 11 16
我的代碼流在16秩序發生 - > 12 - > 9,但我想擁有它16 - > 12 - > 11
代碼如下
public class FindKLargestElements {
private static int n =0;
public static int[] findLarge(Node node, int large[], int k) {
if (node == null) return large;
if (k == 0) return large;
findLarge(node.getRightNode(), large, k);
if (k >0) {
large[n] = node.getValue();
k = k -1;
n = n +1;
return large;
}
findLarge(node.getLeftNode(), large, k);
return large;
}
}
我現在已經解決了這個問題。這是最終的代碼。
這是我做過什麼
- 移除了如果k> 0塊
改變了原始k以一流的水平,而不是遞歸方法級別更新到它是迷路return語句。
public class FindKLargestElements { private static int n =0; private static int k =3; public static int[] findLarge(Node node, int large[]) { if (node == null) return large; if (k == 0) return large; findLarge(node.getRightNode(), large); if (k >0) { large[n] = node.getValue(); k = k -1; n = n +1; } findLarge(node.getLeftNode(), large); return large; }
}
所描繪的樹無效,「10」不可能在左邊。 – Ingo