我有(遞歸)中定義的類實現二叉樹(在Java中):OOP:繼承與遞歸類定義
class BinaryTree {
protected int key;
protected BinaryTree left, right;
// some methods...
}
從中我想實現二進制搜索樹,像這樣:
class BinarySearchTree extends BinaryTree {
// ...
public BinarySearchTree search(int x) {
if (x == key)
return this;
if (x < key)
if (left != null)
return left.search(x); // (*)
else
if (right != null)
return right.search(x); // (*)
return null;
}
}
當然行標有// (*)
,但不會編譯東陽left
和right
只是BinaryTree
S,無線網絡沒有任何search()
方法。
所以我想知道如果那裏有一種方法可以定義從BinaryTree
超BinarySearchTree
但與left
和right
實際上是BinarySearchTree
秒。
或者也許有更好的方法來實現二叉樹和搜索之間的關係:我應該定義一個單獨的Node
類?我應該使用模板嗎?我應該避免遞歸定義嗎? ...
是什麼在這裏有兩個不同的階級意義呢?爲什麼不直接在BinaryTree中放入search()方法並忘記BinarySearchTree? –
是的,但是允許在一個沒有組織成二進制*搜索樹的二叉樹內使用'search()'方法會是「危險的」,因爲當樹長大時該方法會變得計算上難以處理:「BinaryTree」搜索會是強力的,而BinarySearchTree保證最多是對數的,但這更多的是關於算法和數據結構而不是OOP :) – Giorgio
比泛型解決方案更清潔的設計是將二叉樹作爲接口並製作一個簡單的二叉樹實現以及一個二叉搜索樹 –