LeetCode:46.二叉树展开为链表
二叉树展开为链表
目录
1.前序遍历
2.前驱节点
1.前序遍历
对于这道题我们可以使用前序遍历来保存每一个节点并将其连接起来
class Solution {
public:void flatten(TreeNode* root) {vector<TreeNode*> ret;prevorder(root, ret);int n = ret.size();for(int i = 1; i < n; i++){TreeNode* prev = ret[i - 1], *cur = ret[i];prev->left = nullptr;prev->right = cur;}}void prevorder(TreeNode* root, vector<TreeNode*>& ret){if(root == nullptr)return;ret.push_back(root);prevorder(root->left, ret);prevorder(root->right, ret);}
};
2.前驱节点
class Solution {
public:void flatten(TreeNode* root) {while(root != nullptr){if(root->left != nullptr){TreeNode* prev = root->left;while(prev->right != nullptr)prev = prev->right;prev->right = root->right;root->right = root->left;root->left = nullptr;}root = root->right;}}
};