45 lines
1 KiB
Python
45 lines
1 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
import sys
|
||
|
|
||
|
class TreeNode:
|
||
|
left = None
|
||
|
right = None
|
||
|
|
||
|
def check(self):
|
||
|
if self.left == None:
|
||
|
return 1
|
||
|
return self.left.check() + self.right.check() + 1
|
||
|
|
||
|
def CreateTreeNode(depth):
|
||
|
return ChildTreeNodes(depth)
|
||
|
|
||
|
def ChildTreeNodes(depth):
|
||
|
node = TreeNode()
|
||
|
if depth > 0:
|
||
|
node.left = ChildTreeNodes(depth - 1)
|
||
|
node.right = ChildTreeNodes(depth - 1)
|
||
|
return node
|
||
|
|
||
|
|
||
|
min_depth = 4
|
||
|
max_depth = 16
|
||
|
stretch_depth = max_depth + 1
|
||
|
|
||
|
print("stretch tree of depth %d\t check:" %
|
||
|
stretch_depth, CreateTreeNode(stretch_depth).check())
|
||
|
|
||
|
long_lived_tree = CreateTreeNode(max_depth)
|
||
|
|
||
|
for depth in range(min_depth, stretch_depth, 2):
|
||
|
|
||
|
check = 0
|
||
|
iterations = 2**(max_depth - depth + min_depth)
|
||
|
for i in range(1, iterations + 1):
|
||
|
check += CreateTreeNode(depth).check()
|
||
|
|
||
|
print("%d\t trees of depth %d\t check:" % (iterations, depth), check)
|
||
|
|
||
|
print("long lived tree of depth %d\t check:" %
|
||
|
max_depth, long_lived_tree.check())
|