1public void flatten(TreeNode root) {
2 TreeNode current = root;
3
4 while (current != null) {
5 if (current.left != null) {
6 // Find rightmost node in left subtree
7 TreeNode predecessor = current.left;
8 while (predecessor.right != null) {
9 predecessor = predecessor.right;
10 }
11
12 // Connect predecessor's right to current's right
13 predecessor.right = current.right;
14
15 // Move left subtree to right
16 current.right = current.left;
17 current.left = null;
18 }
19
20 // Move to next node
21 current = current.right;
22 }
23}