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;
        }
    }
};
相关推荐
稚辉君.MCA_P8_Java37 分钟前
Gemini永久会员 Java实现的暴力递归版本
java·数据结构·算法
冯诺依曼的锦鲤1 小时前
算法练习:差分
c++·学习·算法
有意义1 小时前
栈数据结构全解析:从实现原理到 LeetCode 实战
javascript·算法·编程语言
鹿鹿鹿鹿isNotDefined1 小时前
逐步手写,实现符合 Promise A+ 规范的 Promise
前端·javascript·算法
封奚泽优2 小时前
下降算法(Python实现)
开发语言·python·算法
im_AMBER2 小时前
算法笔记 16 二分搜索算法
c++·笔记·学习·算法
高洁012 小时前
【无标具身智能-多任务与元学习】
神经网络·算法·aigc·transformer·知识图谱
leoufung2 小时前
逆波兰表达式 LeetCode 题解及相关思路笔记
linux·笔记·leetcode
识醉沉香2 小时前
广度优先遍历
算法·宽度优先
中國龍在廣州2 小时前
现在人工智能的研究路径可能走反了
人工智能·算法·搜索引擎·chatgpt·机器人