class Solution {
public:
void Core(TreeNode* root)
{
int flag = 0;
if (root->left != NULL && (root->left->left != NULL || root->left->right != NULL))
Core(root->left);
if (root->right != NULL && (root->right->left != NULL || root->right->right != NULL))
Core(root->right);
TreeNode* tmp = root->right;
if (root->left != NULL) {
root->right = root->left;
flag = 1;
}
root->left = NULL;
while (root->right != NULL)
root = root->right;
if (flag)
root->right = tmp;
}
void flatten(TreeNode* root) {
if (root == NULL || (root->left == NULL && root->right == NULL))
return;
Core(root);
}
};
今天头痛,就这样吧,非递归的比较简洁。
void flatten(TreeNode *root) {
while (root) {
if (root->left && root->right) {
TreeNode* t = root->left;
while (t->right)
t = t->right;
t->right = root->right;
}
if(root->left)
root->right = root->left;
root->left = NULL;
root = root->right;
}
}