114. Flatten Binary Tree to Linked List 发表于 2021-12-26 Iterate123456789101112131415161718192021class Solution { public void flatten(TreeNode root) { TreeNode curr = root; while (curr != null) { if (curr.left != null) { TreeNode leftRoot = curr.left; curr.left = null; TreeNode rightRoot = curr.right; curr.right = leftRoot; TreeNode tmp = leftRoot; while (tmp.right != null) { tmp = tmp.right; } tmp.right = rightRoot; } curr = curr.right; } }} Recursion12345678910111213141516171819202122232425class Solution { public void flatten(TreeNode root) { // root, left, right if (root == null) { return; } if (root.left == null) { flatten(root.right); } else { TreeNode right = root.right; flatten(root.left); TreeNode tail = root.left; while (tail.right != null) { tail = tail.right; } tail.right = right; root.right = root.left; root.left = null; flatten(root.right); // 不要忘记最左子树展开后继续对剩余的右子树进行展开 } }} Recursion12345678910111213141516171819202122class Solution { public void flatten(TreeNode root) { if (root == null) { return; } flatten(root.left); flatten(root.right); TreeNode leftRoot = root.left; TreeNode rightRoot = root.right; root.left = null; root.right = leftRoot; TreeNode curr = root; while (curr.right != null) { curr = curr.right; } curr.right = rightRoot; }} Reference114. Flatten Binary Tree to Linked List