Java - 使用递归的二叉树的镜像

时间:2012-10-14 18:23:49

标签: java recursion tree

我正在为二叉树编写镜像方法。我的类的工作方式是我有一个抽象类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对象使用'+'运算符,但这是我想要完成的基本思路。我对如何将树木组合在一起感到困惑。任何帮助表示赞赏。感谢。

3 个答案:

答案 0 :(得分:0)

你想如何返回树和右镜像!?简单地说,返回

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

而不是

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

答案 1 :(得分:0)

我认为BinaryTree没有mirror方法。

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

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

1)左右分支镜像

2)使用镜像创建树。

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

答案 2 :(得分: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;
    }
}