Flatten Binary Tree to Linked List

来源:互联网 发布:中文手写软件下载 编辑:程序博客网 时间:2024/06/05 13:04

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);}


0 0
原创粉丝点击