美文网首页
leetcode114.二叉树展开为链表

leetcode114.二叉树展开为链表

作者: 憨憨二师兄 | 来源:发表于2020-06-01 11:00 被阅读0次

题目链接

题目描述:

给定一个二叉树,原地将它展开为一个单链表。

 

例如,给定二叉树

    1
   / \
  2   5
 / \   \
3   4   6
将其展开为:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

思路:递归

拿示例给定的二叉树举例,对于二叉树:

    1
   / \
  2   5
 / \   \
3   4   6

我们需要做的是,首先将root节点的左子树转换为一个链表,然后将root节点的右子树部分转换为一个链表,最后将左右链重组拼接,过程示意图如下:



代码如下:

/**
 * 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) {
        if(root == null){
            return;
        }
        flatten(root.left);
        flatten(root.right);
        TreeNode temp = root.right;
        root.right = root.left;
        root.left = null;
        while(root.right != null){
            root = root.right;
        }
        root.right = temp;
    }
}

时间复杂度:O(N),因为遍历到了二叉树的每一个节点,所以时间复杂度为 O(N)

额外空间复杂度:O(N),需要的额外空间是递归栈的深度,当一棵二叉树在极端情况下也就是一个链表时,递归深度为N,所以额外空间复杂度为O(N)

代码执行结果:


相关文章

网友评论

      本文标题:leetcode114.二叉树展开为链表

      本文链接:https://www.haomeiwen.com/subject/ibsjzhtx.html