/**
* 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 preOrder(TreeNode*& node, TreeNode*& last){
if(node == NULL) return;
if(node->left == NULL && node->right == NULL){
last = node;
return;
}
//节点备份
TreeNode* left = node->left;
TreeNode* right = node->right;
//左子树放到根节点的右子树上,左指针置为空
if(left){
node->right = left;
node->left = NULL;
last = left;
preOrder(left, last);
}
//右子树放到最后一个操作的节点的右子树上
if(right){
last->right = right;
last = right;
preOrder(right, last);
}
return;
}
void flatten(TreeNode* root) {
if(root == NULL || (root->left == NULL && root->right == NULL)) return;
//last记录最后一个操作的节点
TreeNode* last = root;
preOrder(root, last);
return;
}
};
LeetCode刷题_c++版-114二叉树的展开为链表
猜你喜欢
转载自blog.csdn.net/weixin_44343355/article/details/128911314
今日推荐
周排行