题目:
给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
思路:先对树进行先序遍历,之后根据先祖遍历结果构建链表。
void helper(TreeNode* root,vector<int> &list)
{
if(root!=NULL)
{
list.push_back(root->val);
helper(root->left,list);
helper(root->right,list);
}
}
void flatten(TreeNode* root)
{
if(root==NULL)
return;
vector<int> list;
helper(root,list);
TreeNode* p = root;
p->left = NULL;
p->right = NULL;
for(int i=1;i<list.size();i++)
{
p->right = new TreeNode(list[i]);
p = p->right;
}
}