代码如下:
class TreeNode(object):
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
def __str__(self):
return str(self.data)
class Solution:
def postorderTraversal(self, root: TreeNode): # 后序
def postorder(root: TreeNode):
if not root:
return
postorder(root.left)
postorder(root.right)
res.append(root.data)
res = []
postorder(root)
return res
def tree1(node,root,tail):
if len(node)==1 or tail==0 :
return
l = root+1
r = tail
node = node
while node[l].data<node[root].data and l<=tail:
l += 1
while node[r].data>=node[root].data and r>root:
r -= 1
if l - r != 1:
return
node[root].left = node[root+1]
node[root].right = node[root+l]
tree1(node[root+1:l],0,len(node[root+1:l])-1)
tree1(node[r+1:],0,len(node[r+1:])-1)
def tree2(node, root, tail):
if len(node) == 1 or tail == 0:
return
l = root+1
r = tail
node = node
while node[l].data >= node[root].data and l <= tail:
l += 1
while node[r].data < node[root].data and r > root:
r -= 1
if l - r != 1:
return
node[root].left = node[root + 1]
node[root].right = node[root + l]
tree2(node[root + 1:l], 0, len(node[root + 1:l]) - 1)
tree2(node[r + 1:], 0, len(node[r + 1:]) - 1)
n = int(input())
node = [TreeNode(int(i)) for i in input().split()]
tree1(node,0,n-1)
s = Solution()
res = s.postorderTraversal(node[0])
if len(res)!=n:
tree2(node, 0, n - 1)
s = Solution()
res = s.postorderTraversal(node[0])
if len(res) == n:
print("YES")
for i in range(len(res)-1):
print(res[i],end=' ')
print(res[len(res)-1])
else:
print("NO")
测试得分只有17分求大神指点一下: