0

二分木の鏡像法を書いています。私のクラスが機能する方法は、サブクラスEmptyTreeとConsTreeを持つ抽象クラスBinaryTreeを持っていることです。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 に答える