Tree
Types of Trees
- A tree has a root node in general.
- A root node has 0 or more child node.
- The child node has also 0 or more child node and it’s defined repeatedly.
- A simple definition of a node (GO)
type Node struct { name string children []*Node } - A simple definition of a tree (GO)
type Tree struct { root *Node }
General ree

No constraint is placed on the tree’s hierarchy.
Binary Tree

Every node has maximum of two children.
Binary Search Tree

All children on the left <= n < all children on the right
The above property must be true for all nodes n.
Complete Binary Tree

It is a binary tree whose nodes are full at all heights of the tree.
The last level doesn’t have to be full, but the nodes must be filled from left to right.
Full Binary Tree

Every node must have exactly 0 or 2 children
Perfect Binary Tree

The number of nodes : 2k-1
It is both a balanced tree and full binary tree.
All leaf nodes have the same height, and the number of nodes at the last level is maximum.
Binary Tree Traversal
in-order traversal
visit left branch -> current node -> right branch
func inOrderTraversal(node *TreeNode) { if (node != null) { inOrderTraversal(node.left) visit(node) inOrderTraversal(node.right) } }In the case of a binary search tree, it is visited in ascending order.
pre-order traversal
visit current node -> left branch -> right branch
func preOrderTraversal(node *TreeNode) { if (node != null) { visit(node) inOrderTraversal(node.left) inOrderTraversal(node.right) } }It always visits the root node first.
post-order traversal
visit left branch -> right branch -> current node
func postOrderTraversal(node *TreeNode) { if (node != null) { inOrderTraversal(node.left) inOrderTraversal(node.right) visit(node) } }It always visits the root node last.