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

Posted FlyingWarrior

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 };

 

以上是关于LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 114. 二叉树展开为链表(dfs)

[LeetCode] 114. 二叉树展开为链表 ☆☆☆(深度遍历)

[LeetCode] 114. 二叉树展开为链表

LeetCode(114): 二叉树展开为链表

LeetCode第114题—二叉树展开为链表—Python实现

Leetcode No.114 二叉树展开为链表