栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

26 将二叉树按照层级转化为链表(Convert Binary Tree to Linked Lists by Depth)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

26 将二叉树按照层级转化为链表(Convert Binary Tree to Linked Lists by Depth)

文章目录
    • 1 题目
    • 2 解决方案
      • 2.1 思路
      • 2.2 时间复杂度
      • 2.3 空间复杂度
    • 3 源码

1 题目

题目:将二叉树按照层级转化为链表(Convert Binary Tree to Linked Lists by Depth)
描述:给一棵二叉树,设计一个算法为每一层的节点建立一个链表。也就是说,如果一棵二叉树有 D 层,那么你需要创建 D 条链表。

lintcode题号——242,难度——easy

样例1:

输入: {1,2,3,4}
输出: [1->null,2->3->null,4->null]
解释: 
        1
       / 
      2   3
     /
    4

样例2:

输入: {1,#,2,3}
输出: [1->null,2->null,3->null]
解释: 
    1
     
      2
     /
    3
2 解决方案 2.1 思路

  使用宽度优先搜索进行层级遍历,在每一层的for循环中将链表组合并保存头节即可。

2.2 时间复杂度

  二叉树宽度优先搜索,遍历所有的节点,算法的时间复杂度为O(n)。

2.3 空间复杂度

  使用了queue队列数据结构保存节点,算法的空间复杂度为O(n)。

3 源码

细节:

  1. 为了不单独特殊处理每层的头节点,可以使用一个dummyListNode(模拟头),然后将头节点当成普通节点处理,实际返回数据时,返回dummyListNode->next即可。

C++版本:


vector binaryTreeToLists(TreeNode* root) {
    // Write your code here
    vector result;
    if (root == nullptr)
    {
        return result;
    }

    queue nodeQueue;
    nodeQueue.push(root);
    while (!nodeQueue.empty())
    {
        ListNode * dummyListNode = new ListNode(0); // 新建一个虚拟头节点,避开头节点的处理问题
        ListNode * curListNode = dummyListNode; // 用于遍历的Node
        int size = nodeQueue.size();
        for (int i = 0; i < size; i++)
        {
            TreeNode * curTreeNode = nodeQueue.front();
            nodeQueue.pop();
            curListNode->next = new ListNode(curTreeNode->val);
            curListNode = curListNode->next;
            if (curTreeNode->left != nullptr)
            {
                nodeQueue.push(curTreeNode->left);
            }
            if (curTreeNode->right != nullptr)
            {
                nodeQueue.push(curTreeNode->right);
            }
        }
        result.push_back(dummyListNode->next); // 保存的是虚拟头节点的next指针
    }

    return result;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835582.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号