起初,我的想法是先前序遍历二叉树,用数组记录节点。然后创建单链表。最后将创建的链表挂载到root节点上。可是部分通过。原因可能是测试用例检测原先root节点以及后续节点的变动情况
void Preorder(TreeNode* root, vector<int> &vec)
{
if (root != NULL)
{
vec.push_back(root->val);
}
if (root->left != NULL)
{
Preorder(root->left,vec);
}
if (root->right != NULL)
{
Preorder(root->right, vec);
}
}
void flatten(TreeNode* root) {
if (root == NULL) return;
//前序遍历
vector<int> vec;
Preorder(root, vec);
TreeNode* head = new TreeNode(-1);
TreeNode* backup = head;
for (int i = 0; i < vec.size(); i++)
{
head->left = NULL;
TreeNode* tmp = new TreeNode(vec[i]);
head->right = tmp;
head = head->right;
}
root=backup->right;
}
所以还得在root节点上,采用原址平铺的方式。