给你二叉树的根结点 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]
代码如下:
class Solution {
public:
vector<int> nums;
void flatten(TreeNode* root) {
if(!root)
{
return;
}
preorder(root);//调用先序遍历的函数
TreeNode* pre=root;//二叉树的根节点为链表的头节点
root->left=nullptr;//将二叉树的左右子树都置为null
root->right=nullptr;
for(int i=1;i<nums.size();i++)
{
//构建新的链表
TreeNode* p=new TreeNode(nums[i]);
pre->right=p;
pre=p;
}
}
//用递归的方法对二叉树进行先序遍历,将遍历出来的结果保存到数组里
void preorder(TreeNode* root)
{
if(!root)
{
return;
}
nums.push_back(root->val);
preorder(root->left);
preorder(root->right);
}
};