zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    ftp的基本工作原理
    ubuntu自带输入法ibus 无法按数字键取词
    C语言教程
    【数据结构】---线性表
    python搭建opencv
    第六届Code+程序设计网络挑战赛
    整除分块
    ac自动机
    算法梳理 (CSP 2019
    lougu main page
  • 原文地址:https://www.cnblogs.com/wmx24/p/9510558.html
Copyright © 2011-2022 走看看