114. 二叉树展开为链表

       

题目要求将一个二叉树展开为单链表,展开顺序遵循先序遍历。例如,给定如下二叉树:

按照先序遍历展开后,应得到如下单链表:

输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]

     

       

        可以采用头插法。 

        采用头插法时,若要在6前插入5,5前插入4,依此类推,最终得到6、5、4、3、2、1的顺序,可按照以下步骤操作:首先遍历右子树,然后遍历左子树,将左子树置空。接着,使用头插法将根节点插入到链表头部,即执行root->right = head操作。在下次头插前,需将当前根节点更新为新的链表头节点。

        代码:

class Solution {
public:
    TreeNode* head = nullptr;
    void flatten(TreeNode* root) {
        if (!root) return;
        flatten(root->right);
        flatten(root->left);
        root->right = head;
        root->left = nullptr;
        head = root;
    }
};

        时间复杂度:O(n),n为树的节点数

        空间复杂度:O(n),递归需要O(n)栈空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值