【发布时间】:2015-05-02 03:42:07
【问题描述】:
假设我们有这棵树,我们将在深度 2 处执行交换:
1 1
/ \ / \
2 3 [s] -> 2 3
\ \ / /
4 5 4 5
我正在尝试编写一个可以做到这一点的函数:
public void swap(TreeNode node, int[] swaps, int i, int arraySize, int depth) {
if(arraySize == 0) return;
if(depth < swaps[i]) {
swap(node, swaps, i+1, arraySize-1, depth+1);
}
if(depth == swaps[i]) {
TreeNode temp = node.left;
node.left = node.right;
node.right = temp;
swap(node.left, swaps, i+1, arraySize-1, depth+1);
swap(node.right, swaps, i+1, arraySize-1, depth+1);
}
}
当我在调用该方法之前和之后运行上述树的中序遍历时,我得到相同的结果:
2 4 1 3 5
我应该得到
4 2 1 5 3
【问题讨论】:
-
好的,现在我更好地理解了您之前的问题。但还有一个问题,
swaps数组中有什么? -
@Smith_61 嘿嘿 :) 它可能涉及多个交换,并且所有不同的深度都存储在该数组中。在该特定示例中:该数组将仅包含 2.
-
好的,
swaps数组包含了您想要交换的所有不同级别。所以如果你想交换,比如第 2、4、7 级,它会只包含那些按升序排列的数字吗? -
@Smith_61 是的。没错
标签: java recursion binary-tree