【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         # 记录下当前节点



原文地址:https://www.cnblogs.com/GoodRnne/p/10893196.html