This document discusses various tree data structures and algorithms. It begins by defining a tree as a hierarchical data structure consisting of nodes connected by edges. It then discusses different tree terminology like root, child, parent, leaves, siblings, etc. It describes different types of trees like binary trees and general trees. It covers implementations of trees using arrays and linked lists. It discusses various tree traversal algorithms like inorder, preorder and postorder traversals. It describes applications of trees like representing directories in a file system and calculating the size of directories. It covers binary search trees and algorithms for operations on them like search, insert, find minimum and find maximum.