https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/
解题思路:
- 本题观察最后链表从头至尾的顺序正好是前序遍历的结果,所以考虑将前序遍历结果进行存储然后再进行相应的连接
- 注意:
1.前序遍历存储的位置
2.递归结束的条件
参考:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/solution/er-cha-shu-zhan-kai-wei-lian-biao-by-leetcode-solu/
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void flatten(TreeNode* root) {
vector<TreeNode*>v;
getpre(root,v);
int n = v.size();
for(int i = 1;i<n;++i){
TreeNode* temp = v[i-1];
TreeNode* curr = v[i];
temp->left = nullptr;
temp->right = curr;
}
}
void getpre(TreeNode* root,vector<TreeNode*>& v){
if(root == nullptr)return;
// 前序遍历保存每一个节点
v.push_back(root);
getpre(root->left,v);
getpre(root->right,v);
return;
}
};