前言
今天学了一天的JAVA今天的最后一小时刷个树的题吧,这个题目是跟东哥学的,然后现在记录一下,希望明天把所有的方法都学一哈。
二叉树展开为链表
题目描述
题目解析
思想就是先将左边的子树变成链表,然后再把右边的变成链表,最后再将右边的插到左子树链表的尾部。
实现代码
class Solution {
public void flatten(TreeNode root) {
if(root == null){
return;
}
//将左子树拉成链表
flatten(root.left);
//将右子树拉成链表
flatten(root.right);
//定义一个指针用来指向左子树的头
TreeNode left = root.left;
//定义一个指针用来指向左子树的头
TreeNode right = root.right;
//清空根节点的左子树,因为我们要整成链表
root.left = null;
root.right = left;
TreeNode p =root;
//遍历到链表尾部
while(p.right!=null){
p = p.right;
}
//将右子树接到左子树上面
p.right = right;
}
}