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

114.二叉树展开为链表

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

114.二叉树展开为链表

题目

 

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

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

示例

 

 

思路

1,定义一数组,前序遍历保存数的所以节点,然后将数组转换为链表

2,迭代,当树不存在left节点时,树满足要求,当存在left节点时,我们将left节点转换成right节点,转换方法可以看代码

代码

前序遍历+数组 

struct TreeNode* array[2001];
int i;

// void put_array(struct TreeNode* r){
//     if (r == NULL) {
//         return;
//     }
//     array[i++] = r;
//     put_array(r->left);
//     put_array(r->right);
// }
// 
// void flatten(struct TreeNode* root){
//     memset(array, 0, sizeof(array));
//     i = 0;
//     put_array(root);
//     int j = 0;
//     while (array[j] != NULL) {
//         array[j]->left = NULL;
//         array[j]->right = array[j + 1];
//         j++;
//     }
//     return;
// }

迭代 

void flatten(struct TreeNode* root)
{
    while(root)
    {
        if(root->left)
        {
            struct TreeNode * node = root->left;
            while(node->right)
            {
                node = node->right;
            }
            node->right = root->right;
            root->right = root->left;
            root->left = NULL;
        }
        root = root->right;
    }
}

 

时间空间复杂度

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

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

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