Leetcode: 114. Flatten Binary Tree to Linked List | 含C++笔记

把二元树展开成linked list,而且顺序要跟preorder traversal一样,三种traversal的模式我都知道,但每次preorder跟inorder就是会搞混,像这题我看图片的时候,知道他要先找父节点再找左右子点,可以每次都把这个模式记成inorder@@

然後这题有提示说可以写成O(1)的写法

 
 

思路

看到回传值是void的时候蒙了,这样是要用cout吗?如果是cout的话,直接print preorder顺序就好吧,但是对cout空阵列没概念。

如果不是的话,我想到的应该是O(n)的解法,创建一个linked list的变数,然後Preorder traversal一遍树,把巡到的值塞入list中,结束。

 
 

C++笔记

// 手动建立像这样的变数与指标时,首先要先建立能抓着变数头的指标`ans_root`,以及一个可以用来移动的指标`ptr`
TreeNode* ans_root = new TreeNode();
TreeNode* ptr = ans_root;

// 接着在每次需要新的Node时,用同样的变数名建立新的Node跟新的指标`newptr`,把新的Node跟新建的变数连接在一起
TreeNode* newptr = new TreeNode();
newptr->val = curr->val;
ptr->right = newptr;
ptr = ptr->right;

 
 

程序码

class Solution {
public:
    TreeNode* ans_root = new TreeNode();
    TreeNode* ptr = ans_root;
    void flatten(TreeNode* root) {
        preorder(root);
        root->val = ans_root->right->val;
        root->left = ans_root->right->left;
        root->right = ans_root->right->right;
    }
    
private:
    void preorder(TreeNode* curr) {
        if (curr == NULL)
            return;
        TreeNode* newptr = new TreeNode(curr->val);
        ptr->right = newptr;
        ptr = ptr->right;
        preorder(curr->left);
        preorder(curr->right);
    }
};

 
 

@@

遇到void的话,基本上就是把原本给的变数的内容改成答案。

本来想想一下O(1)解法,结果直接睡着,而且他说的O(1)是空间,不是时间

O(1)的解法,他这个应该是用postorder的方式,直接把原本的树拆解。

 

参考:
https://leetcode.com/problems/flatten-binary-tree-to-linked-list/discuss/1543611/C%2B%2B-easy-preorder-recursive-solution
https://leetcode.com/problems/flatten-binary-tree-to-linked-list/discuss/1543162/C%2B%2B-Simple-Approach-using-Recursion-O(1)-space-complexity!


<<:  企业资料通讯Week6 (1) | DNS(网域名称系统)[二]

>>:  Ubuntu巡航记(2) -- 在 Ubuntu 作业系统内安装 TensorFlow

[Day28] 一次跑n支策略最佳化

这边实做一个函数,让他能够一次对好几只策略做最佳化,输入的strategylist就是把好几个策略包...

.NET Core第14天_检视模型ViewModel_Controller跟View双向资料传递方式

视图(检视)模型 / ViewModel 主要用於为View提供资料 ViewModel当中的属性不...

架站:安装 Ubuntu Server

说到架站,虽然CentOS稳定性和安全性更好,但很多人还是偏向使用Ubuntu Server 依据小...

[Day15] Boxenn 实作 Repository & Query

Repository 将 source wrapper 、 record mapper 、 fact...

[Day28] 第二十八章-查询订单api (express)

前言 前面完成建立订单的api後 我们今天要把查询订单做完 扣除今天剩下2天的时间 今天在把查询做完...