Java中二叉树的镜像函数

Java中二叉树的镜像函数,java,binary-tree,Java,Binary Tree,问题:设计一个镜像方法来计算二进制文件的镜像 树 我的代码有什么问题??这对我来说是有意义的,但唯一通过的例子是我的叶子唯一的例子: abstract class ABT { public abstract ABT mirror(); } class Leaf extends ABT { int val; Leaf(int val){ this.val = val; } public ABT mirror() {

问题:设计一个镜像方法来计算二进制文件的镜像 树

我的代码有什么问题??这对我来说是有意义的,但唯一通过的例子是我的叶子唯一的例子:

abstract class ABT {

    public abstract ABT mirror(); 
    }

class Leaf extends ABT { 
    int val; 
    Leaf(int val){ 
        this.val = val; 
    }

public ABT mirror() { 
    return this; 
}
}

class Node extends ABT { 
    int data; 
    ABT left; 
    ABT right; 
    Node(int data, ABT left, ABT right) { 
        this.data = data; 
        this.left = left; 
        this.right = right; 
    }

public ABT mirror() { 
    return new Node(this.data, this.right.mirror(), this.left.mirror());

}
}它怎么会不通过呢? 我添加了一些测试方法,看起来很有效

public class TreeTest {

    public static void main(String[] args){
        new TreeTest();
    }

    TreeTest(){
        Leaf one = new Leaf(1);
        Leaf two = new Leaf(2);
        Leaf three = new Leaf(3);
        Node node23 = new Node(23,two,three);
        Node root = new Node(0,one,node23);



        System.out.println(one+"<->"+one.mirror());
        System.out.println(root+"<->"+root.mirror());
    }

    abstract class ABT {

        public abstract ABT mirror();
    }

    class Leaf extends ABT {

        int val;

        Leaf(int val) {
            this.val = val;
        }

        public ABT mirror() {
            return this;
        }
        public String toString(){
            return Integer.toString(val);
        }
    }

    class Node extends ABT {

        int data;
        ABT left;
        ABT right;

        Node(int data, ABT left, ABT right) {
            this.data = data;
            this.left = left;
            this.right = right;
        }

        public String toString(){
            StringBuilder sb = new StringBuilder();
            sb.append(data).append(",{").append(left.toString()).append("},{")
                    .append(right.toString()).append("}");
            return sb.toString();

        }
        public ABT mirror() {
            return new Node(this.data, this.right.mirror(), this.left.mirror());

        }
    }
}
公共类树测试{
公共静态void main(字符串[]args){
新树测试();
}
树测试(){
叶一=新叶(1);
叶二=新叶(2);
叶三=新叶(3);
Node node23=新节点(23,2,3);
节点根=新节点(0,一,节点23);
System.out.println(一个+“”+一个.mirror());
System.out.println(root+“”+root.mirror());
}
抽象类ABT{
公共抽象ABT-mirror();
}
类叶扩展了ABT{
int-val;
叶(int-val){
this.val=val;
}
公共ABT镜像(){
归还这个;
}
公共字符串toString(){
返回整数.toString(val);
}
}
类节点扩展了ABT{
int数据;
ABT左;
ABT权利;
节点(int数据、ABT左、ABT右){
这个数据=数据;
this.left=左;
这个。右=右;
}
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
sb.append(data.append(“,{”).append(left.toString()).append(“},{”)
.append(right.toString()).append(“}”);
使某人返回字符串();
}
公共ABT镜像(){
返回新节点(this.data、this.right.mirror()、this.left.mirror());
}
}
}
输出为:

十一,

0,{1},{23,{2},{3}}0,{23,{3},{2},{1}


它不是镜像的吗?

我的以下测试没有通过:(新节点(1)(新节点(2,新叶(3),新叶(4)),新叶(6)))不会导致(新节点(1,新叶(6),新节点(2,新叶(4),新叶(3)))如何测试它?你能给我看一下字符串表示吗?你使用equals()方法吗?刚刚尝试了你的测试用例。toString()提供相同的字符串,因此它可以工作。