leetcode 114. 二叉树展开为链表
题目描述
解题思路
参考:https://labuladong.gitee.io/algo/2/20/34/
首先思考用遍历,一边前序遍历,一边构造出一条新的链表就可以了。但需要额外空间,所以此题不考虑。
然后思考用子问题,定义函数为将以 root 为根节点的树拉平为链表。
class Solution {
// 将以root为根节点的树拉平为链表
public void flatten(TreeNode root) {
// base case
if (root == null) return;
// 将左右子树拉平
flatten(root.left);
flatten(root.right);
// 分别记录左右子树链表的头结点
TreeNode left = root.left;
TreeNode right = root.right;
// 将root和左子树的链表连接
root.left = null;
root.right = left;
// 找到当前链表的尾节点,将其与右子树链表的头结点连接
TreeNode p = root;
while (p.right != null) {
p = p.right;
}
p.left = null;
p.right = right;
}
}