從根節點開始比較目標鍵值:
node.key → 移至右子樹null → 不存在,返回 null// 前序遍歷
public void preOrder() { preOrder(mRoot); }
private void preOrder(BSTNode<T> node) {
if (node != null) {
System.out.print(node.key + " ");
preOrder(node.left);
preOrder(node.right);
}
}
// 中序遍歷
public void inOrder() { inOrder(mRoot); }
private void inOrder(BSTNode<T> node) {
if (node != null) {
inOrder(node.left);
System.out.print(node.key + " ");
inOrder(node.right);
}
}
// 後序遍歷
public void postOrder() { postOrder(mRoot); }
private void postOrder(BSTNode<T> node) {
if (node != null) {
postOrder(node.left);
postOrder(node.right);
System.out.print(node.key + " ");
}
}
// BST 查找
public BSTNode<T> search(T key) {
BSTNode<T> current = mRoot;
while (current != null) {
int cmp = key.compareTo(current.key);
if (cmp < 0) current = current.left;
else if (cmp > 0) current = current.right;
else return current;
}
return null;
}
BSTree<Integer> tree = new BSTree<>();
tree.insert(3); tree.insert(1); tree.insert(2);
tree.insert(5); tree.insert(4); tree.insert(6);
tree.preOrder(); // 輸出: 3 1 2 5 4 6
tree.inOrder(); // 輸出: 1 2 3 4 5 6 (有序!)
tree.postOrder(); // 輸出: 2 1 4 6 5 3
BSTree.BSTNode<Integer> node = tree.search(5);
System.out.println(node != null ? node.left.key : "not found"); // 輸出: 4
O(log n),最壞 O(n) (樹退化為鏈表)。 3
/ \
1 5
\ / \
2 4 6