问题描述
- 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; }
}
有没有什么办法把两个类公共的二叉树逻辑部分提出来做为父类,两个类分别继承这个父类再只需实现自己的业务逻辑,就能达成原代码功能的?
解决方案
其实关于二叉树的泛型实现,我觉得 树应该通用,其节点存储的数据为泛型比较理想,左右孩子和父节点的类型应该与创建的树的类型一致,
你觉得呢?今天才看到,很抱歉
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;
}
}
解决方案二:
试试java的“泛型”
解决方案三:
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;
}
}
解决方案四:
感谢你的分享。谢谢。
时间: 2024-08-04 03:56:58