Property 4: 
Perfectly balanced or full tree:
1.	Empty tree is a full tree
2.	Or, the left and right subtrees are full trees with the same height
Complete binary tree:
•	Perfectly balanced except at the last level
•	Items on the last level are as far to the left as possible
•	If you put a complete tree in an array, there are no holes (internal wasted space).
•	See the examples from the board
Property 4 shows how to put a complete tree in an array.
ADT Definition for a binary tree.
•	It is difficult to visualize a binary tree insertion, without a criteria
•	Because it is difficult to specify where an item would go.
•	BinaryTree() - constructor
•	 ~BinaryTree() - destructor 
•	   bool IsEmpty() const  
•	bool Root(T& x) const x will contain root item
•	void MakeTree(const T& element,
•	           BinaryTree<T>& left, BinaryTree<T>& right);
•	A binary tree needs to be built bottom up in absence of a criterion
•	      void BreakTree(T& element, BinaryTree<T>& left,
•	                    BinaryTree<T>& right);
•	Opposite of Make tree
•	void PreOrder(void(*Visit)(BinaryTreeNode<T> *u))
•	void InOrder(void(*Visit)(BinaryTreeNode<T> *u))
•	void PostOrder(void(*Visit)(BinaryTreeNode<T> *u))
•	void LevelOrder(void(*Visit)(BinaryTreeNode<T> *u));
•	Four travesrals as defined earlier
•	visit is the function that will be executed at each node.
•	visit is pointer to a function that takes one parameter of the type BinaryTreeNode* and returns void.