我有(递归)中定义的类实现二叉树(在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
比泛型解决方案更清洁的设计是将二叉树作为接口并制作一个简单的二叉树实现以及一个二叉搜索树 –