Click to Flip Card
Data Structures / Trees
The starting node is called root. A tree can have exactly one root. A child in a tree can have only one parent.
Nodes
A tree is a data structure with nodes that are connected by edges. The starting node of a tree is called a root and the nodes at the end are called leaves. Trees always have exactly one root. In trees child nodes must have one parent and edges that are not loops.
root = {'name': 'A', 'children': []}
node2 = {'name': 'B', 'children': []}
node3 = {'name': 'C', 'children': []}
node4 = {'name': 'D', 'children': []}
node5 = {'name': 'E', 'children': []}
node6 = {'name': 'F', 'children': []}
node7 = {'name': 'G', 'children': []}
node8 = {'name': 'H', 'children': []}
root['children'] = [node2, node3]
node2['children'] = [node4]
node3['children'] = [node5, node6]
node5['children'] = [node7, node8]
print(node3['children'])
"""
[{'name': 'E', 'children':
[{'name': 'G', 'children': []},
{'name': 'H', 'children': []}]},
{'name': 'F', 'children': []}]
"""
Anytree / Render
Using tree data structures is made easy with anytree package.
from anytree import Node, RenderTree
root = Node('A')
node2 = Node('B', parent=root)
node3 = Node('C', parent=root)
node4 = Node('D', parent=node2)
node5 = Node('E', parent=node3)
node6 = Node('F', parent=node3)
node7 = Node('G', parent=node5)
node8 = Node('H', parent=node5)
print("Tree:")
for pre, fill, node in RenderTree(root):
print(pre, node.name)
# Delete node 'C' and its descendants
node3.parent = None
print("Tree after deletion:")
[print(pre,node.name) for pre,_,node in RenderTree(root)]
"""
Tree:
A
├── B
│ └── D
└── C
├── E
│ ├── G
│ └── H
└── F
Tree after deletion:
A
└── B
└── D
"""
Last update: 42 days ago