class Node { public int val; public Node left, right; public Node(int v) { val = v; left = right = null; } } Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); void Mirror(Node node) { if (node == null) return; Node temp = node.left; node.left = node.right; node.right = temp; Mirror(node.left); Mirror(node.right); } List<int> result = new List<int>(); void InOrder(Node node) { if (node == null) return; InOrder(node.left); result.Add(node.val); InOrder(node.right); } Mirror(root); InOrder(root); Console.WriteLine(string.Join(",", result));
Mirroring swaps left and right children. Original in-order: 2,1,3. After mirror, left and right children of root swap, so in-order becomes 3,1,2.
class Node { public int val; public Node left, right; public Node(int v) { val = v; left = right = null; } } Node root = new Node(4); root.left = new Node(2); root.right = new Node(7); root.left.left = new Node(1); root.left.right = new Node(3); root.right.left = new Node(6); root.right.right = new Node(9); void Mirror(Node node) { if (node == null) return; Node temp = node.left; node.left = node.right; node.right = temp; Mirror(node.left); Mirror(node.right); } List<int> result = new List<int>(); void PreOrder(Node node) { if (node == null) return; result.Add(node.val); PreOrder(node.left); PreOrder(node.right); } Mirror(root); PreOrder(root); Console.WriteLine(string.Join(",", result));
After mirroring, left and right children swap at every node. The pre-order traversal visits root first, then left subtree, then right subtree. The mirrored tree's pre-order is 4,7,9,6,2,3,1.
void Mirror(Node node) {
if (node == null) return;
Node temp = node.left;
node.left = node.right;
node.right = temp;
Mirror(node.right);
Mirror(node.left);
}The function swaps left and right children, then recursively calls Mirror on right and left children (which were swapped). This still covers all nodes once, so no infinite recursion or errors occur.
class Node { public int val; public Node left, right; public Node(int v) { val = v; left = right = null; } } Node root = new Node(10); root.left = new Node(5); root.right = new Node(15); root.left.left = new Node(3); root.left.right = new Node(7); root.right.left = new Node(12); root.right.right = new Node(18); void Mirror(Node node) { if (node == null) return; Node temp = node.left; node.left = node.right; node.right = temp; Mirror(node.left); Mirror(node.right); } List<int> result = new List<int>(); Queue<Node> queue = new Queue<Node>(); Mirror(root); queue.Enqueue(root); while(queue.Count > 0) { Node current = queue.Dequeue(); result.Add(current.val); if (current.left != null) queue.Enqueue(current.left); if (current.right != null) queue.Enqueue(current.right); } Console.WriteLine(string.Join(",", result));
After mirroring, left and right children swap. The level order traversal visits nodes level by level, so the output is 10,15,5,18,12,7,3.
Mirroring swaps left and right children. Doing it twice swaps them back to original positions, so the tree remains unchanged.
