java二叉树模板抽象化

问题描述

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

java二叉树模板抽象化的相关文章

java根据模板生成word文档,要求可以在Android上打开文档

问题描述 java根据模板生成word文档,要求可以在Android上打开文档 求一个方法,可以按照模板生成word文档,可以在android系统上打开.xml文件生成的模板不能再安卓上,即wps上打开.POI可以打开,可是我不知道怎么将查询到了结果集循环写入表格,求解

各位大神,Java的模板模式和单纯的继承有什么不同?好处在哪里?

问题描述 各位大神,Java的模板模式和单纯的继承有什么不同?好处在哪里? 各位大神,Java的模板模式和单纯的继承有什么不同?好处在哪里? 解决方案 模板模式是指定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 模板模式的优点 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码. 子类实现算法的某些细节,有助于算法的扩展. 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合"开放-封闭原则"

JAVA velocity模板引擎使用实例_JSP编程

velocity使用1.7版本. 在win7下使用intelliJ IDEA建立一基于tomcat的web app项目,命名为todo_web,设置path为/todo,导入velocity相关jar包.只导入velocity-1.7.jar这个包可能会报错,根据提示再导入velocity自带的其他包. 项目结构如下: 测试Tomcat index.jsp内容如下: 复制代码 代码如下: <%-- Created by IntelliJ IDEA. --%><%@ page conten

Eclipse Java注释模板设置详解

原文:http://blog.csdn.net/ahhsxy/article/details/4542682 设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦.现就每一个元素逐一介绍: 文件(Files)注释标签: /**    * @Title: ${file_name} * @Package ${package_name} * @Descripti

Java Web模板代码生成器的设计与实现

起因 项目中需要根据数据库表写很多Meta.Dao.Service代码,其中很多代码都是重复而繁琐的.因此如果有一个模板代码的生成器,就可以一定程度提高开发效率. 目标 可配置生成Java Web项目中Dao.Meta.Service层模板代码的生成器. 代码框架 mvn archetype:generate -DgroupId=com.zju -DartifactId=JavaWebCodeGenerator -DarchetypeArtifactId=maven-archetype-weba

在JAVA中实现的二叉树结构

最近研究了一下二叉树结构,参考了一些资料,总结了一下. package com.test;/** *//** * * 在JAVA中实现二叉树结构 * * 讲解: * 二个方法函数,一个寻找关键字--searchkey 另一个是插入一个结点:insertTree * * 另外这是一个完全的先序遍历二叉树的语法.先根结点,再左结点,如无再右结点,如些加归至 * * 搜索完毕. * */public class BinaryTreeTest ...{ private BinaryTree root =

遍历-实现一个完整二叉树c++模板类

问题描述 实现一个完整二叉树c++模板类 为二叉树实现一个完整的C++模板类.要求:包含构造函数.复制构造函数和析构函数,实现四个遍历及前向迭代 解决方案 #include<iostream> #include<deque> using namespace std; //binary node with parent node template<typename T> class node { public: node(const T &v, node<T

Java实现表达式二叉树_java

什么是二叉树,这里不再介绍,可以自行百度:二叉树.在这里利用java实现"表达式二叉树".  表达式二叉树的定义  第一步先要搞懂表达式二叉树是个什么东东?举个栗子,表达式:(a+b×(c-d))-e/f.将数字放在叶子节点,将操作符放在分支节点,就构成了一个二叉树,由于存储的是一个表达式,称之为"表达式二叉树". 童靴们可能好奇这个到底是怎么构建的?就拿45+23*56/2-5来说吧.首先取出第一个数字45放在叶子节点,遇到"+"后将其放到分支

微信支付java版本之JSAPI支付+发送模板消息_java

本文为大家分享了java版本之JSAPI支付+发送模板消息的相关资料,供大家参考,具体内容如下 1.工具类 工具类见:微信支付JAVA版本之Native付款 2.公众账号设置 3.代码实现  openId:openId为用户与该公众账号之间代表用户的唯一标示  以下类中涉及到生成token,关闭订单接口调用,获取配置文件信息,和工具类,在其他文章中有具体代码实现  package com.zhrd.bussinss.platform.controller.rest; import java.io