likes
comments
collection
share

二叉树展开为链表

作者站长头像
站长
· 阅读数 28

一、题目描述:

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。

示例 1:

二叉树展开为链表

输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6] 示例 2:

输入:root = [] 输出:[] 示例 3:

输入:root = [0] 输出:[0]

提示:

树中结点数在范围 [0, 2000] 内 -100 <= Node.val <= 100

来源:力扣(LeetCode)

链接:leetcode.cn/problems/fl…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

对于任意一棵子树,根节点为root,通过flat这个递归方法展开为链表,并返回链表的尾部节点,具体过程如下:

如果根节点为null,或者是叶子节点,则它的尾节点为其自身。

否则,首先将左子树展开为链表,返回左子树链表的尾部节点tailLeft。然后将右子树展开为链表,返回右子树链表的尾部节点tailRight。

递归解法总体步骤:

  1. 严格按照递归函数定义
  2. 递归左右子树
  3. 从根节点遍历至最右下结点
  4. 最后拼接原来的右子树

三、AC 代码:


class Solution {
    public void flatten(TreeNode root) {
        if (root == null) {
            return ;
        }

        // 后序遍历模板
        flatten(root.left);
        flatten(root.right);

        TreeNode right = root.right;
        TreeNode left = root.left;
        root.left = null;
        root.right = left;
        // 遍历到最右下结点,拼接右子树
        TreeNode p = root;
        while (p.right != null) {
            p = p.right;
        }
        p.right = right;
    }
}

四、总结:

二叉树展开为链表

掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

希望对你有帮助

期待下次再见~

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!

转载自:https://juejin.cn/post/7127105256039088141
评论
请登录