美文网首页算法练习
二叉树展开为链表(LeetCode 114 -- 使用递归遍历)

二叉树展开为链表(LeetCode 114 -- 使用递归遍历)

作者: 倚剑赏雪 | 来源:发表于2020-02-24 22:46 被阅读0次

题目

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

例如,给定二叉树

    1
   / \
  2   5
 / \   \
3   4   6

将其展开为:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

解析

1.使用递归遍历,先将左右子树保存下来,再将左右子树的最后一个节点存下来
2.若有左子树,则将左子树置为空,右子树指向左子树,last指向左子树的最后一个节点
3.若有右子树,若左子树的最后一个节点不为空,则将左子树的右节点指向右节点,last指向右子树的最后一个节点

代码

    public void Flatten(TreeNode root)
    {
        TreeNode last = null;
        PreorderFlatten(root,ref last);
    }

    void PreorderFlatten(TreeNode node,ref TreeNode last)
    {
        if(node == null) return;
        if (node.left == null&&node.right == null)
        {
            last = node;
            return;
        }

        TreeNode left = node.left;//备份左右指针
        TreeNode right = node.right;
        TreeNode leftLast = null;//左右子树最后一个节点
        TreeNode rightLast = null;
        if (left != null)
        {
            PreorderFlatten(left,ref leftLast);//若有左子树,递归将左子树转换为单链表
            node.left = null;//左子树为空
            node.right = left;//右指针改变
            last = leftLast; //将该节点的last保存为左子树
        }

        if (right != null)//若有右子树,递归将右子树转换为单链表
        {
            PreorderFlatten(right, ref rightLast);
            if (leftLast != null)//若找到左子树的最后一个节点(有左子树)
            {
                leftLast.right = right;
            }

            last = rightLast;
        }
    }

相关文章

  • tag12:树 二叉树搜索树

    1、leetcode:114. 二叉树展开为链表[https://leetcode-cn.com/problems...

  • LeetCode 114. 二叉树展开为链表 | python

    114. 二叉树展开为链表 题目来源:力扣(LeetCode)https://leetcode-cn.com/pr...

  • 二叉树展开为链表(LeetCode 114 -- 使用递归遍历)

    题目 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 将其展开为: 解析 1.使用递归遍历,先将左右子树保...

  • 114. 二叉树展开为链表

    题目描述 给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 将其展开为: 解题思路 使用前序遍历的方式,...

  • 链表和二叉树

    单向链表 链表反转 二叉树定义 1、递归中序遍历 2、迭代中序遍历 3、二叉树层序遍历 4、判断一棵树是否为平衡树...

  • 二叉树展开为链表

    题目: 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 将其展开为: 思想: 利用前序遍历和一个全局遍历指...

  • 114.二叉树展开为链表

    链接: 114.二叉树展开为链表 思路: 对于节点A,其右子树作为左子树前序遍历最后一个叶子节点的有子树,再将节点...

  • 二叉树展开为链表

    二叉树展开为链表[https://leetcode.cn/problems/flatten-binary-tree...

  • 某VR设备公司面经

    链表反转,需要遍历链表到NULL为止。 二叉树镜像对称,使用递归。 总之,链表和树是需要刷题的。另外,项目经验等,...

  • LeetCode-114-二叉树展开为链表

    二叉树展开为链表 题目描述:给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 ...

网友评论

    本文标题:二叉树展开为链表(LeetCode 114 -- 使用递归遍历)

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