Advertisement
jinhuang1102

114. Flatten Binary Tree to Linked List

Nov 17th, 2018
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.32 KB | None | 0 0
  1. 方法一:用preorder traversal 的方法,把每一个node都存到一个list里面,因为每次存的都是完整的root,所以在list里的每一个值都有完整的TreeNode的属
  2. 性。然后从前到后遍历每一个root,temp[i].right = temp[i+1]; temp.left = None
  3. class Solution:
  4.     def preorder(self, root, ls):
  5.         if not root:
  6.             return
  7.        
  8.         ls.append(root)
  9.         self.preorder(root.left, ls)
  10.         self.preorder(root.right, ls)
  11.    
  12.     def flatten(self, root):
  13.         """
  14.        :type root: TreeNode
  15.        :rtype: void Do not return anything, modify root in-place instead.
  16.        """
  17.         if not root:
  18.             return None
  19.        
  20.         temp = []
  21.         self.preorder(root, temp)
  22.        
  23.         for i in range(0, len(temp)-1):
  24.             temp[i].right = temp[i+1]
  25.             temp[i].left = None
  26.  
  27. 方法二:方法二其实比方法一复杂,但是是另一种实现的方法。再次方法中,preorder不再是用recursive来实现,而是用interaction的方法。先用preorder把左子      树变成一个linked list。然后把右子树变成一个linked list, 之后把root -> left -> right 连起来。最后root.left = None
  28. class Solution:    
  29.     def preorder(self, root):
  30.         if not root:
  31.             return None
  32.        
  33.         head = TreeNode(0)
  34.         temp = head
  35.        
  36.         st = []
  37.         st.append(root)
  38.         while st:
  39.             node = st.pop()
  40.             temp.right = TreeNode(node.val)
  41.             temp = temp.right
  42.            
  43.             if node.right:
  44.                 st.append(node.right)
  45.             if node.left:
  46.                 st.append(node.left)
  47.                
  48.         return head.right
  49.        
  50.    
  51.     def flatten(self, root):
  52.         """
  53.        :type root: TreeNode
  54.        :rtype: void Do not return anything, modify root in-place instead.
  55.        """
  56.         if not root:
  57.             return None
  58.        
  59.         left = self.preorder(root.left)
  60.         right = self.preorder(root.right)
  61.        
  62.         if left:
  63.             temp = left
  64.             while temp.right:
  65.                 temp = temp.right
  66.                
  67.             temp.right = right
  68.             root.right = left
  69.            
  70.         else:
  71.             root.right = right
  72.            
  73.         root.left = None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement