zoukankan      html  css  js  c++  java
  • 【LeetCode每天一题】Flatten Binary Tree to Linked List(二叉树转化为单链表)

    Given a binary tree, flatten it to a linked list in-place.

    For example, given the following tree:

        1
       / 
      2   5
     /    
    3   4   6
    

    The flattened tree should look like:

    1
     
      2
       
        3
         
          4
           
            5
             
              6

    思路

      从题中我们可以看出在将二叉树转化为单链表之后,链表是有序的,按照二叉树的遍历思路,这个很想前序遍历。但是前序遍历存在一个问题就是对于节点并不好处理,并且单链表都是在节点的右子节点。这样会导致节点指针的指向会出现问题。既然从小到大不行,那就使用从大到小来进行链表的组合。拿例子中的二叉树来举例,先遍历到节点6,然后然后是节点5,在是节点4, 一直到最后的节点1。这个遍历过程很像后序遍历,只不过这里是先遍历二叉树的右节点。继续此方法我们可以写出如下代码。
    解决图示


    解决代码

    
    
     1 # Definition for a binary tree node.
     2 # class TreeNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution(object): 
     9     def __init__(self):
    10         self.prenode = None     # 用来保存上一个节点的位置
    11         
    12     def flatten(self, root):
    13         """
    14         :type root: TreeNode
    15         :rtype: None Do not return anything, modify root in-place instead.
    16         """
    17         if not root:
    18             return 
    19         self.flatten(root.right)       # 先遍历右节点
    20         self.flatten(root.left)       # 再遍历到做节点
    21         root.right = self.prenode      # 将当前节点的右节点赋值为上一个节点
    22         root.left = None              # 左节点设置为空
    23         self.prenode = root         # 记录下当前节点
    
    
    
    
    
  • 相关阅读:
    Linux的网络配置
    Linux进程
    我需要的电脑配置
    spring注解配置
    spring中集合的配置
    getProperty()方法的参数和用途
    树的遍历
    单词变换
    最短路径dijkstra算法
    文件路径
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10893196.html
Copyright © 2011-2022 走看看