题目描述

 

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

例如,给定二叉树

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

 

相关文章:

  • 2022-02-25
  • 2021-09-04
  • 2022-01-30
  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-28
  • 2021-10-12
  • 2022-12-23
  • 2022-01-05
  • 2021-12-18
  • 2021-10-16
  • 2022-01-26
相关资源
相似解决方案