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