https://leetcode.com/problems/flatten-binary-tree-to-linked-list/
关于tree的问题,首先要想到递归的办法
参考http://www.cnblogs.com/zuoyuan/p/3721157.html
正确的code:
class Solution(object):
def flatten(self, root):
"""
:type root: TreeNode
:rtype: void Do not return anything, modify root in-place instead.
"""
if not root: return
self.flatten(root.left)
self.flatten(root.right)
p = root.left
if root.left == None :return
while p.right:
p = p.right
tmp = root.right
root.right = root.left
p.right = tmp
root.left = None
我的code,暂时保存在这里,有问题。即如何用iterative的方法实现这个问题?
class Solution(object):
def flatten(self, root):
"""
:type root: TreeNode
:rtype: void Do not return anything, modify root in-place instead.
"""
if not root: return None
stack = []
pre = root
while stack or root:
if root:
stack.append(root)
root = root.left
else:
tmp = stack[-1]
root = stack.pop()
if pre == root.left and root.right:
pre.right = root.right
root.left, root.right = None, pre
pre = tmp
root = root.right
return root