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 helper_list(BinTree*& root,BinTree*& head,BinTree*& tail)
{
if(root == NULL ||(root->right == NULL && root->left == NULL))
{
head = root;
tail = root;
return ;
}
head = root;
BinTree* left_head = root->left;
head->left = NULL;
BinTree* left_tail = NULL;
BinTree* right_head = root->right;
BinTree* right_tail = NULL;
helper_list(left_head,left_head,left_tail);
helper_list(right_head,right_head,right_tail);
if(left_head != NULL)
head->right = left_head;
else
head->right = right_head;
if(left_tail != NULL)
left_tail->right = right_head;
if(right_tail != NULL)
tail = right_tail;
else
tail = left_tail;
}
BinTree* LinkedList(BinTree* root)
{
if(root == NULL)
return NULL;
BinTree * head=NULL,*tail=NULL;
helper_list(root,head,tail);
return head;
}
Flatten Binary Tree to Linked List--LeetCode
原文地址:http://blog.csdn.net/yusiguyuan/article/details/44955343