114. 二叉树展开为链表
给你二叉树的根结点 root
,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode
,其中right
子指针指向链表中下一个结点,而左子指针始终为null
。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
思路:
对树进行先序遍历,存入队列,通过队列的数据重新构建树
先序遍历用递归进行
import java.util.LinkedList;
import java.util.Scanner;
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}class Solution {public void flatten(TreeNode root) {LinkedList<TreeNode> queue = new LinkedList<>();depread(root, queue);queue.poll();TreeNode curr = root;while (!queue.isEmpty()) {TreeNode node = queue.poll();curr.left=null;curr.right=node;curr=node;}}public void depread(TreeNode root, LinkedList<TreeNode> queue) {if (root == null) return;queue.add(root);depread(root.left, queue);depread(root.right, queue);}
}