第一次代码:(2018.4.26)
解题思路:先中序遍历,然后对list排序,然后改变节点的指向
class Solution:
def MidOder(self, root, list_tree, list_val):
if root:
if root.left:
self.MidOder(root.left,list_tree, list_val)
list_tree.append(root)
list_val.append(root.val)
if root.right:
self.MidOder(root.right,list_tree, list_val)
def Convert(self, pRootOfTree):
list_tree = []
list_val = []
list_out = []
if pRootOfTree:
self.MidOder(pRootOfTree,list_tree, list_val)
for index, val in sorted(enumerate(list_val), key = lambda x:x[1]):
list_out.append(list_tree[index])
if len(list_out) > 1:
for i in range(0,len(list_out)):
if i != 0 and i !=len(list_out)-1:
list_out[i].left = list_out[i-1]
list_out[i].right = list_out[i+1]
elif i == 0:
list_out[i].right = list_out[1]
list_out[i].left = None
else:
list_out[i].left = list_out[-2]
list_out[i].right = None
return list_out[0]
else:
return None
def MidOder(self, root, list_tree, list_val):
if root:
if root.left:
self.MidOder(root.left,list_tree, list_val)
list_tree.append(root)
list_val.append(root.val)
if root.right:
self.MidOder(root.right,list_tree, list_val)
def Convert(self, pRootOfTree):
list_tree = []
list_val = []
list_out = []
if pRootOfTree:
self.MidOder(pRootOfTree,list_tree, list_val)
for index, val in sorted(enumerate(list_val), key = lambda x:x[1]):
list_out.append(list_tree[index])
if len(list_out) > 1:
for i in range(0,len(list_out)):
if i != 0 and i !=len(list_out)-1:
list_out[i].left = list_out[i-1]
list_out[i].right = list_out[i+1]
elif i == 0:
list_out[i].right = list_out[1]
list_out[i].left = None
else:
list_out[i].left = list_out[-2]
list_out[i].right = None
return list_out[0]
else:
return None