【LeetCode】Flatten Binary Tree to Linked List

来源:互联网 发布:恒生指数期货数据 编辑:程序博客网 时间:2024/06/11 01:43


Flatten Binary Tree to Linked List

 Total Accepted: 18516 Total Submissions: 66328My Submissions

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

click to show hints.

这种题需要使用传引用,得出一个头和尾结点,这样递归起来非常简单。中间需要对NULL多作判断

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    void flatten(TreeNode *root) {        if(root == NULL)            return;        TreeNode *head = NULL, *tail = NULL;        flattenHelper(root,head,tail);        root = head;    }    void flattenHelper(TreeNode *root, TreeNode *&head, TreeNode *&tail) {        if (root == NULL) {            head = NULL;            tail = NULL;            return;/////////////////////////////////////////        }        head = tail = root;//!!!!        TreeNode *left_head = NULL, *left_tail = NULL, *right_head = NULL, *right_tail = NULL;        if(root->left) {            flattenHelper(root->left,left_head,left_tail);        }        if(root->right) {            flattenHelper(root->right,right_head,right_tail);        }        if (left_head) {//!!!!            root->right = left_head;            root->left = NULL;        }        else {            left_tail = root;//!!!!        }        tail = left_tail;        if (right_head) {//!!!!            left_tail->right = right_head;        }        else {            right_tail = left_tail;//!!!!        }        tail = right_tail;    }};











0 0
原创粉丝点击