码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-21 12:17:08      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:展开   tree node   lis   保存   16px   href   return   public   oid   

题目描述

 

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

例如,给定二叉树

    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)

标签:展开   tree node   lis   保存   16px   href   return   public   oid   

原文地址:https://www.cnblogs.com/wmx24/p/9510558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!