您的位置:首页 > 编程语言 > Python开发

Python实现最大子树问题

2012-09-25 14:02 477 查看
找出一个子树,使之结点的数值之和为最大!

View Code

class tree_node(object):
"""docstring for TreeNode"""
def __init__(self,val,left = None,right = None):
self.val = val
self.left = left
self.right = right

class attr_of_tree(object):
"""docstring for list_node """
def __init__(self,is_positive,sum,root):
self.is_positive =  is_positive
self.sum = sum
self.root = root

def get_max_sub_tree(root,flag = False):

def f(root,l):
if root is None:
return attr_of_tree(True,0,root)
else:
left = f(root.left,l)
right = f(root.right,l)
attr = attr_of_tree(left.is_positive and right.is_positive and root.val > 0 , left.sum + right.sum + root.val , root)
l.append(attr)
return attr

l = []
f(root,l)
if flag:
l = [i for i in l if i.is_positive]
return max(l,key = lambda x: x.sum).root

def build_test_tree(l):

def f(l,n):
if n > len(l)-1 or l
is None:
return None
else :
return tree_node(l
,f(l,2*n+1),f(l,2*n+2))

return f(l,0)

def print_tree(root):
if root is None:
return
else:
print root.val
print_tree(root.left)
print_tree(root.right)

def main():
root = build_test_tree( [0,-7,2,3,4,-4,3,4] )
print "=========================="
ret = get_max_sub_tree(root)
print_tree(ret)

root = build_test_tree( [0,-10,2,3,4,1,3,4,-1] )
print "=========================="
ret = get_max_sub_tree(root)
print_tree(ret)

root = build_test_tree( [0,-10,2,3,4,1,3,4,-1] )
print "=========================="
ret = get_max_sub_tree(root,True)
print_tree(ret)

if __name__ == '__main__':
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: