public void switchNode(int value1, int value2) {
            if (value1  == value2) {
                return;
            }

            Node node1 = this.getNodeByValue(value1);
            Node node2 = this.getNodeByValue(value2);

            Node parent1 = node1.parent;
            Node parent2 = node2.parent;

            boolean isNode1LeftChild = node1 == parent1.leftChild;
            boolean isNode2LeftChild = node2 == parent2.leftChild;

            if (isNode1LeftChild) {
                parent1.leftChild = node2;
            } else {
                parent1.rightChild = node2;
            }
            // BUG3: forget to change the parent
            node2.parent = parent1;

            if (isNode2LeftChild) {
                parent2.leftChild = node1;
            } else {
                parent2.rightChild = node1;
            }
            node1.parent = parent2;
        }