Python实现最大子树问题
2012-09-25 14:02
477 查看
找出一个子树,使之结点的数值之和为最大!
View Code
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()
相关文章推荐
- 类动态规划求解较小规模的最大团问题(Python实现)
- 连续子向量的最大和问题(Python实现)
- Python实现求解最大子数组问题
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(3) 最大子序列和问题
- 计算4000000000以内最大的f(n)=n的值---字符串问题python实现(五)
- [151225] Python3 实现最大堆、堆排序,解决TopK问题
- 计算4000000000内的最大f(n)=n值---字符串的问题python实现(五岁以下儿童)
- 背包问题 插入排序 快排 TSP问题(hamiltonian 回路) Python实现
- 模拟退火算法解决TSP问题+Python实现
- python 实现矩阵中每行最大的前x个值所在的位置
- 使用Python脚本实现批量网站存活检测遇到问题及解决方法
- 多机调度问题——python实现
- 最大子数组问题-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- Python基于更相减损术实现求解最大公约数的方法
- Python使用Dijkstra算法实现求解图中最短路径距离问题详解
- 李航《统计学习方法》第六章——用Python实现最大熵模型(MNIST数据集)
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- 算法基础之python实现动态规划中数字三角形和最长上升子序列问题
- 分苹果问题的C++和Python实现