题目
给你二叉树的根结点
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);}
}