class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
this.val = val === undefined ? 0 : val;
this.left = left === undefined ? null : left;
this.right = right === undefined ? null : right;
}
}
function mirrorTree(root: TreeNode | null): TreeNode | null {
if (root === null) return null; // base case: empty node
// swap left and right children
const temp = root.left;
root.left = root.right;
root.right = temp;
// recursively mirror left subtree
mirrorTree(root.left);
// recursively mirror right subtree
mirrorTree(root.right);
return root;
}
// Driver code to build tree and test
const root = new TreeNode(1,
new TreeNode(2, new TreeNode(4), new TreeNode(5)),
new TreeNode(3, new TreeNode(6), new TreeNode(7))
);
mirrorTree(root);
function printTree(node: TreeNode | null): string {
if (node === null) return "null";
const leftStr = printTree(node.left);
const rightStr = printTree(node.right);
return `${node.val} -> (${leftStr}, ${rightStr})`;
}
console.log(printTree(root));if (root === null) return null; // base case: empty node
stop recursion when node is empty
const temp = root.left;
root.left = root.right;
root.right = temp;
swap left and right children of current node
recursively mirror left subtree (which was originally right subtree)
recursively mirror right subtree (which was originally left subtree)
1 -> (3 -> (7 -> (null, null), 6 -> (null, null)), 2 -> (5 -> (null, null), 4 -> (null, null)))