在给定深度执行节点的所有子节点的交换

时间:2015-05-01 17:14:16

标签: java recursion binary-tree depth

我试图编写一个函数,在给定深度的节点的所有子节点上执行交换。

假设我们有这样一棵树:

   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

1 个答案:

答案 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;
    }
}