114. 二叉树展开为链表

问题描述

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

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

分析

注意,这里应该使用同样的TreeNode,也就是评判时,直接看原始结点的值,不能用new TreeNode然后自己赋值。

代码(非原地)

class Solution {
public:
    vector<TreeNode*> v;
    void solve(TreeNode* root) {
        if (root == nullptr) {
            return ;
        }
        v.push_back(root);
        solve(root->left);
        solve(root->right);
    }
    void flatten(TreeNode* root) {
        solve(root);
        TreeNode* p = new TreeNode();
        for (int i = 0; i < v.size(); i++) {
            p->right = v[i];
            p->left = nullptr;
            p = p->right;
        }
    }
};

此外,关于new,会变化原始指针的位置:

typedef struct A {
    int val = 0;
    A* next;
}A;
int main()
{
    A* a;
    A* p = a->next;
    p = new A();
    p->val = 555;
    printf("%d \n", a->next->val);
    // 输出为0,可知此时的p并不是a->next;
}
posted @   saulstavo  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示