给你二叉树的根结点 root ,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
思考
这道题怎么做?先序遍历!左右节点!来一个中间量存储左节点,然后加到右节点去
代码
class Solution {
public void flatten(TreeNode root) {
// 定义当前节点
TreeNode cur = root;
//节点不空就循环
while (cur != null) {
// 左节点不为空循环
if (cur.left != null) {
// 定义一个前驱节点
TreeNode pre = cur.left;
//左不空循环
while (pre.right != null) {
pre = pre.right;
}
//将不空的右节点赋给前驱节点的右节点
pre.right = cur.right;
//左节点赋给右节点
cur.right = cur.left;
//删除原左节点
cur.left = null;
}
// 节点后移
cur = cur.right;
}
}
}
