LeetCode 114. 二叉树展开为链表
题目描述
给你二叉树的根结点 root
,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode
,其中right
子指针指向链表中下一个结点,而左子指针始终为null
。 - 展开后的单链表应该与二叉树 先序遍历 顺序相同。
示例
示例 1:
输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [0] 输出:[0]
解法
1.辅助数组
解题思路
创建一个数组,通过先序遍历存储二叉树的数据,那么遍历数组时的数据排列就是要求单链表的数据排列。我们得到数据就可以从root,不断创建新节点,新节点存入对一个的数组值,使每个节点的left指向空,使用right连接,最终root就成了链表的头节点。
class Solution {
public:void flatten(TreeNode* root) {if(root == nullptr) return;vector <int> temp;TreeNode* L = root;Getvec(root,temp);for(int i = 1;i < temp.size();i ++){L -> left = nullptr;TreeNode* b = new TreeNode();b -> val = temp[i];L -> right = b;L = b;}}void Getvec(TreeNode* root,vector<int> &temp){if(root == nullptr) return;temp.push_back(root -> val);Getvec(root -> left,temp);Getvec(root -> right,temp);}
};
时间复杂度O(N),空间复杂度O(N)