二叉树一般问题

Binary Tree Generic Problemm

目前正在备考,我卡在了通用二叉树

public interface BinaryTreeNode <T>{

    public void setParent(T binaryTreeNodeImpl);
    public void setLeft(T left);

    public void setRight(T right);
    public T getRoot() ;
    public T getParent();
    public void setValue(T string);
    public T getLeft();


}

这是我的界面。

public class BinaryTreeNodeImpl <T> implements  BinaryTreeNode <T>{

    public T value;
    private T Root;
    private T right;
    private T parent;
    private T left;




    public void  setRight(T right) {
        this.right = right;
         ( (BinaryTreeNode<T>) right).setParent( (T) this);


    }
     public T getRoot() { 
         return  (T) Root; 
    }
      public void setValue(T value) {
          this.value=value;

      }
    public T getValue() {
        return value;
    }

    public T getParent() {
        return parent;
    }
    public void setParent(T binaryTreeNodeImpl) {
        parent= binaryTreeNodeImpl;

    }
    public T getRight() {
        return right;
    }

    public T getLeft() {
        return left;
    }


    public void setLeft(T left) {
        this.left =  left;
        (  (BinaryTreeNode<T>) left).setParent((T) this);
    }


}

这是我的二叉树工具。当我尝试运行。下面的代码我得到了 Value 方法未定义的字符串。

BinaryTreeNode<String> root = new BinaryTreeNodeImpl<String>();
        root.setValue("abc");
        BinaryTreeNode<String> left = new BinaryTreeNodeImpl<String>();
        left.setValue("xyz");
        root.setLeft(left);
        System.out.println(left.getParent().getValue());
        System.out.println(root.getLeft().getValue()); 

我没明白我哪里做错了?我应该为此创建抽象方法吗?

您的 getParent() 有一个 return 类型 T;我的印象是你希望它是 BinaryTreeNode<T> 因为 BinaryTreeNode 的父节点应该是二叉树节点(最好是同一类型)。

您当前的设计类似于说 BinaryTreeNode 的父级可以是 StringInteger 或猫,而您正在调用 getValue()在那上面,显然没有定义,因此是错误的。

对接口中方法声明中的 return 类型进行相同的编辑。

您出现错误的原因是 getParent()getLeft() return T,即 String,而您本想 return 这里是一个节点。

您在 BinaryTreeNode 接口中对 root、parent、left 和 right 的引用具有类型 T,但这是节点需要引用的数据类型,而不是节点本身.将 return 值的数据类型和与值无关的方法的参数从 T 更改为 BinaryTreeNode<T>。这当然会影响您实施中的相同声明 class BinaryTreeNodeImpl.