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()提供相同的字符串,因此它可以工作。