题目
给你二叉树的根结点
root
,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode
,其中right
子指针指向链表中下一个结点,而左子指针始终为null
。- 展开后的单链表应该与二叉树 先序遍历 顺序相同。
解题思路
- 通过递归先序遍历树;
- 用List存储遍历后的结点;
- 遍历List重组链表。
代码展示
class Solution { private List<TreeNode> list = new ArrayList<>(); public void flatten(TreeNode root) { if(root == null){ return; } nextNode(root); root = list.get(0); TreeNode temp = root; for (int i = 1; i < list.size(); i++){ temp.left = null; temp.right = list.get(i); temp = temp.right; } System.out.println(123); } public void nextNode(TreeNode root){ if(root == null){ return; } list.add(root); nextNode(root.left); nextNode(root.right); } }