题目描述:给你二叉树的根结点 root ,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
- 展开后的单链表应该与二叉树 先序遍历 顺序相同。
代码实现
递归实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public void flatten(TreeNode root) { convertTree2List(root); }
public TreeNode convertTree2List(TreeNode root) { if (root == null || (root.left == null && root.right == null)){ return root; }
TreeNode leftHeadNode = convertTree2List(root.left);
TreeNode rightHeadNode = convertTree2List(root.right);
TreeNode leftTailNode = leftHeadNode; while (leftTailNode != null && leftTailNode.right != null){ leftTailNode = leftTailNode.right; }
if (leftTailNode == null){ root.right = rightHeadNode; root.left = null; }else { root.right = leftHeadNode; leftTailNode.right = rightHeadNode; root.left = null; } return root; } }
|