原题链接:114. 二叉树展开为链表
solution:
先序遍历存储节点,再挨个展开
class Solution {
public:
vector<TreeNode *> tree; //存储节点
void Preorder(TreeNode *root,vector<TreeNode *> &tree) {
if(root == nullptr) return;
tree.push_back(root);
Preorder(root->left,tree);
Preorder(root->right,tree);
}
void flatten(TreeNode* root) {
Preorder(root,tree);
int n = tree.size();
if(n == 1) return; //一个节点直接返回
for(int i = 0;i < n;i++) {
root->left = nullptr;
root->right = tree[i];
root = root->right;
}
}
};
评论看到的解法:类似反向的后序遍历
class Solution {
public:
TreeNode *cur = nullptr;
void flatten(TreeNode* root) {
if(root == nullptr) return;
flatten(root->right);
flatten(root->left);
root->right = cur;
root->left = nullptr;
cur = root;
}
};