LeetCode Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6
The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
void flatten(TreeNode *root) {
if(NULL == root || (root->left==NULL&&root->right==NULL))
return;
if(root->left != NULL)
{
flatten(root->left);
}
if(root->right != NULL)
{
flatten(root->right);
}
//如果父节点没有左子树,则不用交换
if(root->left==NULL)
return;//如果父节点左子树不为空,则搜索到父节点左孩子的最底层右孩子,保存在p中
TreeNode** p = &(root->left->right);
while(*p != NULL)
p = &((*p)->right);
//将父节点的右孩子接入
*p = root->right;
root->right = root->left;
root->left = NULL;
}