【发布时间】:2019-03-20 15:23:02
【问题描述】:
我有一个简单的 Node 类来在我的二叉树中构造一个树节点:
class Node {
int data;
Node left;
Node right;
public Node(int i) {
this.data = i;
}
}
我编写了一个简单的 Tree 类,它将使用 Node 结构来构建一棵树:
class Tree {
Node root;
}
我正在尝试在我的 Tree 类中编写一个递归函数 mirror(),它将返回树的镜像版本(左右节点交换)。
因此,如果我在 Tree t 上调用此函数,我希望从根开始,并交换所有节点,直到我们到达一个没有更多子节点可交换的节点。我正在苦苦挣扎的部分是在我们交换了根节点子节点之后,我如何在这些节点上递归调用镜像函数,然后返回镜像树。
如您所见,下面的代码将交换根节点的子节点,但之后我被卡住了,因为我无法在节点上调用镜像函数,只能调用树。
public Tree mirror() {
Node temp = this.root.left;
this.root.left = this.root.right;
this.root.right = temp;
如果您能指出正确的方向,我将不胜感激。
【问题讨论】:
-
你不能只从右到左而不是从左到右遍历你的树吗?使用同一棵树,您可以通过 ASC 或 DESC 遍历它。
-
你应该让镜像方法接受一个节点,而不是整个树。这样,您可以在左右元素上递归调用它。
-
提示:您必须以递归方式执行此操作(将节点作为参数传递给函数)或迭代执行(使用堆栈)
-
@ClaudiuGuja 我会这样做,但是如果我想简单地调用 tree.mirror() 来获取镜像树呢?如果它接受一个节点,那么我必须调用 mirror(node) 这似乎很乏味,因为我必须创建一个新的节点对象