LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)

题目描述

 

给定一个二叉树,原地将它展开为链表。

例如,给定二叉树

    1
   / \
  2   5
 / \   \
3   4   6

将其展开为:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

 

解题思路

 

二叉树转化为链表的基本思想是:对于左孩子转化为右孩子;对于右孩子,拼接到根结点左子树最后一个节点作为右孩子。所以在自上而下转化时,对于每个节点要先保存其右孩子,然后记录转为链表后本子树的最后一个节点并返回给上一个根节点。

 

代码

 

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     void flatten(TreeNode* root) {
13         if(root) flat(root);
14     }
15     TreeNode* flat(TreeNode* root){
16         if(root->left == NULL && root->right == NULL) return root;
17         TreeNode* right = root->right;
18         TreeNode* last = NULL;
19         if(root->left){
20             root->right = root->left;
21             root->left = NULL;
22             last = flat(root->right);
23             last->right = right;
24         }
25         if(right) return flat(right);
26         return last;
27     }
28 };

 

posted @ 2018-08-21 11:55  FlyingWarrior  阅读(473)  评论(0编辑  收藏  举报