我试图编写一个函数,在给定深度的节点的所有子节点上执行交换。
假设我们有这样一棵树:
1
/ \
2 3
包含我想要执行交换的节点深度的array
。
如果数组包含1
,那么我们交换该深度的节点的所有子节点。那棵树看起来像这样:
1
/ \
3 2
我的功能如下:
public void swap(TreeNode node, int[] swaps, int i, int arraySize, int depth) {
if(arraySize == 0) return;
if(depth < swaps[i]) {
swap(node.left, swaps, i+1, arraySize-1, depth+1);
}
if(depth == swaps[i]) {
TreeNode temp = node.left;
node.left = node.right;
node.right = temp;
}
if(depth != swaps[i]) {
swap(node.right, swaps, i+1, arraySize-1, depth+1);
}
if(depth == swaps[i]) {
TreeNode temp2 = node.left;
node.left = node.right;
node.right = temp2;
}
}
当我在示例树上运行此方法并执行树的inorder traversal
时,它会给我2 1 2
答案 0 :(得分:0)
将第node.right = temp2
行与第node.left = node.right
行交换。
示例:
public void swap(TreeNode node, int[] swaps, int i, int arraySize, int depth) {
if(arraySize == 0) return;
// Swap left
if(depth < swaps[i]) {
swap(node.left, swaps, i+1, arraySize-1, depth+1);
}
// Swap right
if(depth != swaps[i]) {
swap(node.right, swaps, i+1, arraySize-1, depth+1);
}
// Swap us
if(depth == swaps[i]) {
TreeNode temp2 = node.left;
node.left = node.right;
node.right = temp2;
}
}