2 tjkoei tjkoei 于 2016.02.26 15:55 提问

java二叉树模板抽象化

我有两个二叉树类,分别管理着不同的数据
class bt1{
//自身业务逻辑
String s;
public String getS(){
return "godness " + s;
}

//二叉树逻辑
bt1 left;
bt1 right;
bt1 parent;
public void setLeft(bt1 l){
    this.left = l;
        l.parent = this;
}
public bt1 getLeft(){
    return left;
}
public void setRight(bt1 r){
    this.right = r;
    right.parent = this;
}
public bt1 getRight(){
    return right;
}
public bt1 getParent(){
 return parent;
}

}

class bt2{
//自身业务逻辑
int i;
public void add(){
i++;
}

//二叉树逻辑
bt2 left;
bt2 right;
bt2 parent;
public void setLeft(bt2 l){
    this.left = l;
        l.parent = this;
}
public bt2 getLeft(){
    return left;
}
public void setRight(bt2 r){
    this.right = r;
    right.parent = this;
}
public bt2 getRight(){
    return right;
}
public bt2 getParent(){
 return parent;
}

}

有没有什么办法把两个类公共的二叉树逻辑部分提出来做为父类,两个类分别继承这个父类再只需实现自己的业务逻辑,就能达成原代码功能的?

4个回答

sinat_19650093
sinat_19650093   2016.03.04 16:53

其实关于二叉树的泛型实现,我觉得 树应该通用,其节点存储的数据为泛型比较理想,左右孩子和父节点的类型应该与创建的树的类型一致,
你觉得呢?今天才看到,很抱歉

class BTrees {

protected BTrees<T> leftChild;
protected BTrees<T> rightChild;
T data;
protected BTrees<T> parent; //非必需,半冗余数据
public BTrees<T> getLeftChild() {
    return leftChild;
}
public void setLeftChild(BTrees<T> leftChild) {
    this.leftChild = leftChild;
}
public BTrees<T> getRightChild() {
    return rightChild;
}
public void setRightChild(BTrees<T> rightChild) {
    this.rightChild = rightChild;
}
public T getData() {
    return data;
}
public void setData(T data) {
    this.data = data;
}
public BTrees<T> getParent() {
    return parent;
}
public void setParent(BTrees<T> parent) {
    this.parent = parent;
}

}

sinat_19650093
sinat_19650093   2016.02.26 16:43

试试java的“泛型”

tjkoei
tjkoei 回复乐地山庄: 代码在下面的回复里
接近 2 年之前 回复
sinat_19650093
sinat_19650093 你用泛型写的代码我看看
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei 我试了,用泛型改写但是没能实现出来。
接近 2 年之前 回复
tjkoei
tjkoei   2016.02.27 11:58

package util;

public abstract class BTNwP >{

protected T leftChild;
protected T rightChild;
protected T parent; //非必需,半冗余数据

public T getLeftChild() {
    return leftChild;
}
public void setLeftChild(T leftChild) {
    this.leftChild = leftChild;
    //this.leftChild.parent = this;  //err here
}
public T getRightChild() {
    return rightChild;
}
public void setRightChild(T rightChild) {
    this.rightChild = rightChild;
    //this.rightChild.parent = this;
}
public T getParent() {
    return parent;
}
public  void setParent(T parent) {
    this.parent = parent;
}

public boolean hasLeftChild(){
    return (leftChild == null)?false:true;
}

public boolean hasRightChild(){
    return (rightChild == null)?false:true;
}

}

tjkoei
tjkoei   2016.04.20 15:32

感谢你的分享。谢谢。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!