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
https://leetcode.com/problems/flatten-binary-tree-to-linked-list/
方法一:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/*
struct ListNode{
int val;
struct ListNode *next;
};*/
void firstView(struct TreeNode* root, struct ListNode **list){
if(!root) return;
(*list)->val = (int)root;
(*list)->next = malloc(sizeof(struct ListNode));
(*list)->next->val = 0;
(*list)->next->next = NULL;
(*list) = (*list)->next;
firstView(root->left, list);
firstView(root->right, list);
}
void flatten(struct TreeNode* root){
struct ListNode *ptmp = NULL;
struct ListNode list = {.val=0,.next=NULL};
struct ListNode *p;
list.next = malloc(sizeof(struct ListNode));
list.next->val = 0;
list.next->next = NULL;
p = list.next;
firstView(root, &p);
p = list.next->next;
while(p&&p->val){
root->left = NULL;
root->right = (struct TreeNode*)p->val;
root = root->right;
ptmp = p;
p = p->next;
free(ptmp);
}
free(list.next);
}