解题思路:
1)找到根节点的左子树的最右节点,然后将根节点的右子树接到前节点的右子树上,不断执行这个过程。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void flatten(TreeNode* root) {
if (root == nullptr) {
return;
}
TreeNode *cur = root;
while (cur) {
if (cur->left) { // 找到左子树的最后节点作为前节点
TreeNode *pre = cur->left;
while (pre->right) {
pre = pre->right;
}
pre->right = cur->right;
cur->right = cur->left;
cur->left = nullptr;
}
cur = cur->right;
}
}
};