题目描述
给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
题解
- 将左子树插入到右子树的地方
- 将原来的右子树接到左子树的最右边节点
- 考虑新的右子树的根节点,一直重复上边的过程,直到新的右子树为 null
/**
* Definition for a binary tree node.
* public 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)
{
TreeNode head = root;
TreeNode ss = null;
while(head!=null)
{
if(head.left!=null)
{
TreeNode temp = head.left;
ss = temp;
while(temp.right!=null) //找到左子树最右边的节点
{
temp = temp.right;
}
temp.right = head.right; //将右子树连接在左子树最右边的那个节点的右边
head.right = ss;
}
head.left = null;
head = head.right;
}
}
}