将一棵二叉树按照前序遍历拆解成为一个假链表
。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。
注意事项
不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。
样例
1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4 6 4 \ 5 \
6
解题思路:前序遍历用向量保存一下个点位置,将向量前后用右指针穿起来,左指针赋值为NULL,返回向量的首位即可。
class Solution { public: /** * @param root: a TreeNode, the root of the binary tree * @return: nothing */ vector<TreeNode *>tem; void dfs(TreeNode *root){ if(root==NULL)return; tem.push_back(root); dfs(root->left); dfs(root->right); } void flatten(TreeNode *root) { // write your code here if(root==NULL)return; dfs(root); for(int i=0;i<tem.size()-1;i++){ tem[i]->right=tem[i+1]; tem[i]->left=NULL; } tem[tem.size()-1]->right=NULL; tem[tem.size()-1]->left=NULL; } };