0

我正在为二叉树编写镜像方法。我的类的工作方式是我有一个抽象类 BinaryTree,它有子类 EmptyTree 和 ConsTree。我在为 ConsTree 编写方法时遇到问题。该类看起来像这样:

public class ConsTree<T> extends BinaryTree<T>
{
    BinaryTree<T> left;
    BinaryTree<T> right;
    T data;

    public BinaryTree<T> mirrorImage() 
    {
        ConsTree<T> tree = new ConsTree<T>(this.data, this.right, this.left); //In the constructor, the second parameter sets the left tree, so creates a new tree with the left and right trees swapped
        if(this.left == null && this.right == null)
                return tree;
        if(this.left == null)
                return tree + this.right.mirrorImage();
        else if(right == null)
                return tree + this.left.mirrorImage();

        return tree + this.left.mirrorImage() + this.right.mirrorImage();
}

显然这不起作用,因为我不能对 BinaryTree 对象使用“+”运算符,但是这是我想要完成的基本思想。我只是对如何将树木组合在一起有点困惑。任何帮助表示赞赏。谢谢。

4

3 回答 3

0

你想如何返回树和正确的mirrorImage!?简单,返回

    this.right.mirrorImage();
    this.left.mirrotImage();

代替

    tree + this.right.mirrorImage();
    tree + this.left.mirrorImage();
于 2012-10-14T18:29:55.723 回答
0

我认为BinaryTree没有mirror方法。

在这种情况下,您的返回类型不应该是BinaryTree<T>but ConstTree<T>,因为您需要分支来实现mirrorImage()

我觉得令人费解的是,在您拥有分支的镜像之前,您将分支分配给构造函数中返回的树。逻辑是

1) 获取左右分支的镜像

2)用镜像创建一棵树。

您正在设置一些永远不会使用的值。

于 2012-10-14T18:30:09.493 回答
0
public class BinaryTreeMirror {

    public static TreeNode mirrorOf(TreeNode rootNode) {
        if (rootNode == null) {
            return rootNode;
        } else {
            TreeNode temp = rootNode.right;
            rootNode.right = rootNode.left;
            rootNode.left = temp;
            mirrorOf(rootNode.right);
            mirrorOf(rootNode.left);
        }
        return rootNode;
    }
}
于 2014-05-17T21:14:27.147 回答