2023-07-29 15:37:01 -07:00

2.5 KiB

trees and graphs



tree tranversals


  • breath-first search: - similar to pre-order, but work with queue (level order problem)
  • depth-first search:
    • if the depth of the tree is too large, stack overflow might happen, therefore iterative solutions might be better.
    • work with stacks
    • in-order:
      • left -> node -> right
    • pre-order
      • node -> left -> right
      • top-down (parameters are passed down to children).
    • post-order
      • left -> right -> node
      • bottom-up solution (if you know the answer of the children, can you concatenate the answer of the nodes?):
      • deletion process is always post-order: when you delete a node, you will delete its left child and its right child before you delete the node itself.
      • also, post-order is used in mathematical expressions as it's easier to write a program to parse a post-order expression. using a stack, each time when you meet a operator, you can just pop 2 elements from the stack, calculate the result and push the result back into the stack.


Tree.py


> python3 Trees.py


🌴🌴🌴 Testing SimpleTree 🌴🌴🌴
a
	b
		d
		e
	c
		h
		g



🌳🌳🌳 Testing BinaryTree 🌳🌳🌳

🟡 Adding [4, 1, 4, 6, 7, 9, 10, 5, 11, 5] to the tree...
🟢 Printing the tree in preorder...
4
1
6
9
5
5
11
10
7
4

🟢 Searching for node 5: True
 Searching for node 15: False
 Is root a leaf? False
🟢 Is root full? True
 Is the tree balanced? False
 Is the tree a binary search tree? False


🎄🎄🎄 Testing BinarySearchTree 🎄🎄🎄

🟡 Adding [4, 1, 4, 6, 7, 9, 10, 5, 11, 5] to the tree...
 Item 4 not added as BSTs do not support repetition.
 Item 5 not added as BSTs do not support repetition.
🟢 Printing the tree in preorder:
4
1
6
5
7
9
10
11

🟢 Searching for node 5: True
 Searching for node 15: False
 Is root a leaf? False
🟢 Is root full? True
🟢 Largest node? 11
🟢 Smallest node? 1
 Is the tree balanced? False
🟢 Is the tree a binary search tree? True

BinaryTree.py


  • a clean implementation adapted from the class above.
> python3 BinaryTree.py

🌳🌳🌳 Testing BinaryTree 🌳🌳🌳

🟡 Adding [4, 1, 4, 6, 7, 9, 10, 5, 11, 5] to the tree...
🟢 Print the tree preorder: [4, 1, 6, 9, 5, 5, 11, 10, 7, 4]
🟢 Print the tree inorder: [4, 1, 6, 9, 5, 5, 11, 10, 7, 4]
🟢 Print the tree postorder: [4, 1, 6, 9, 5, 5, 11, 10, 7, 4]

🟢 Search for node 5: True
 Search for node 15: False