“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
今天写了二叉树的中序遍历,所以打算把热题100中关于二叉树的题,都解一遍,方便大家专项学习
一、题目描述
- 给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。
二、思路分析
-
这道题还蛮有意思的难度为中等
-
我看了网上的题解就是左子树插入到右子树的地方
-
将原来的右子树接到左子树的最右边节点
-
重复直到右子树为空
三、AC 代码:
class Solution {
public void flatten(TreeNode root){
//边界判断
if(root == null) return;
// 获取左子树
TreeNode temp = root.left;
// 将右子树赋值到左子树
root.left = root.right;
// 将左右子树交换
root.right = temp;
//获取最右边的节点
TreeNode cur = root;
while(cur.right != null)
cur = cur.right;
//将左子树拼接到右子树上
cur.right = root.left;
//左子树置空
root.left = null;
//递归
flatten(root.right);
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:-
左右交换
-
左边置空
-