LeetCode:46.二叉树展开为链表

二叉树展开为链表

目录

1.前序遍历

2.前驱节点


1.前序遍历

对于这道题我们可以使用前序遍历来保存每一个节点并将其连接起来

cpp 复制代码
class Solution {
public:
    void flatten(TreeNode* root) 
    {
        vector<TreeNode*> ret;
        prevorder(root, ret);
        int n = ret.size();
        for(int i = 1; i < n; i++)
        {
            TreeNode* prev = ret[i - 1], *cur = ret[i];
            prev->left = nullptr;
            prev->right = cur;
        }
    }

    void prevorder(TreeNode* root, vector<TreeNode*>& ret)
    {
        if(root == nullptr)
            return;

        ret.push_back(root);
        prevorder(root->left, ret);
        prevorder(root->right, ret);
    }
};

2.前驱节点

cpp 复制代码
class Solution {
public:
    void flatten(TreeNode* root) {
        while(root != nullptr)
        {
            if(root->left != nullptr)
            {
                TreeNode* prev = root->left;
                while(prev->right != nullptr)
                    prev = prev->right;
                prev->right = root->right;
                root->right = root->left;
                root->left = nullptr;
            }
            root = root->right;
        }
    }
};
相关推荐
Magic--2 分钟前
选择排序:原理、实现与优化
数据结构·算法·排序算法
qq_417695055 分钟前
基于C++的区块链实现
开发语言·c++·算法
We་ct7 分钟前
LeetCode 74. 搜索二维矩阵:两种高效解题思路
前端·算法·leetcode·矩阵·typescript·二分查找
2401_894241928 分钟前
基于C++的反射机制探索
开发语言·c++·算法
cui_ruicheng11 分钟前
C++ 数据结构进阶:unordered_map 与 unordered_set源码分析与实现
数据结构·c++·算法·哈希算法
C蔡博士15 分钟前
最小生成树(MST)详解:定义、算法与核心性质
算法·贪心算法·图论·时间复杂度
sxtyjty18 分钟前
AtCoder Beginner Contest 450 G题题解
数学·算法·期望
ccLianLian21 分钟前
数论·快速幂和逆元
数据结构·算法
没头脑的男大23 分钟前
华为题目152乘积最大子数组
算法·华为
Yeats_Liao27 分钟前
华为开源自研AI框架昇思MindSpore应用案例:WaveNet实现音乐生成
人工智能·深度学习·算法·机器学习·边缘计算