subtree(users/wpcarro): docking briefcase at '24f5a642'
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
This commit is contained in:
commit
019f8fd211
766 changed files with 175420 additions and 0 deletions
65
users/wpcarro/scratch/data_structures_and_algorithms/dft.py
Normal file
65
users/wpcarro/scratch/data_structures_and_algorithms/dft.py
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
from random import choice
|
||||
|
||||
|
||||
class Node(object):
|
||||
def __init__(self, value=None, left=None, right=None):
|
||||
self.value = value
|
||||
self.left = left
|
||||
self.right = left
|
||||
|
||||
|
||||
def p(node, indent=0):
|
||||
print(indent * ' ' + '|-' + str(node.value))
|
||||
if node.left is not None:
|
||||
p(node.left, indent=indent + 2)
|
||||
if node.right is not None:
|
||||
p(node.right, indent=indent + 2)
|
||||
|
||||
|
||||
# read trees (i.e. traversing, parsing)
|
||||
# write trees (i.e. generating, printing)
|
||||
def random(d=0):
|
||||
left = None
|
||||
right = None
|
||||
|
||||
if choice([True, False]):
|
||||
left = random(d + 1)
|
||||
|
||||
if choice([True, False]):
|
||||
right = random(d + 1)
|
||||
|
||||
return Node(
|
||||
value=d,
|
||||
left=left,
|
||||
right=right,
|
||||
)
|
||||
|
||||
|
||||
################################################################################
|
||||
# DFTs can be:
|
||||
# - imperative (mutable)
|
||||
# - functional (immutable)
|
||||
# - iterative
|
||||
# - recursive
|
||||
################################################################################
|
||||
|
||||
|
||||
# Iterative
|
||||
def traverse(node, f):
|
||||
stack = [(node, 0)]
|
||||
|
||||
while len(stack):
|
||||
node, depth = stack.pop()
|
||||
f(node, depth)
|
||||
print(depth)
|
||||
|
||||
if node.left is not None:
|
||||
stack.append((node.left, depth + 1))
|
||||
if node.right is not None:
|
||||
stack.append((node.right, depth + 1))
|
||||
|
||||
|
||||
print('----------------------------------------------------------------------')
|
||||
for _ in range(10):
|
||||
traverse(random(), lambda _, d: print(d))
|
||||
print()
|
||||
Loading…
Add table
Add a link
Reference in a new issue