defmap_link(f, s): if s is Link.empty: return s else: return Link(f(s.first), map_link(f, s.rest))
deffilter_link(f, s): if s is Link.empty: return s filter_rest = filter(f, s.rest) if f(s.first): return Link(s.first, filter_rest) else: return filter_rest
defindented(self): lines = [] for b inself.branches: for line in b.indented(): lines.append(' '+line) return [str(self.label)] + lines defis_leaf(self): returnnotself.branches
实现一些操作
如下代码实现了创建斐波那契树以及输出叶子节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
deffib_tree(n): if n==0or n==1: return Tree(n) else: left = fib_tree(n-2) right = fib_tree(n-1) fib_n = left.label + right.label return Tree(fib_n, [left, right])
defleaves(t): if t.is_leaf(): return [t.label] else: all_leaves = [] for b in t.branches: all_leaves.extend(leaves(b)) return all_leaves
剪枝
1 2 3 4 5
# 通过每次重新构建branches列表,将等于n的值排除在列表外以实现 defprune(t, n): t.branches = [b for b in t.branches if b.label!=n] for b in t.branches: prune(b, n)