Saturday, September 20, 2014

Tree Data Structure

Siblings - Nodes with the same parent
Depth of a node- number of edges from the root to the node.
Height of a node - number of edges from the node to the deepest leaf. 
Height of a tree - height of a root.

Binary Tree- tree where each node can have no more than two children (a node can have just one)
full binary tree - A binary tree in which each node has exactly zero or two children. There are no nodes with exactly one child.
Complete binary - completely filled, with the possible exception of the bottom level, which is filled from left to right.
Binary Search Tree - A binary tree is a binary search tree (BST) if and only if an inorder traversal of the binary tree results in a sorted sequence.

Binary Search Tree

  • The keys in a binary search tree are always stored in such a way as to satisfy the binary-search-tree property:
Let x be a node in a binary search tree. If y is a node in the left subtree of x, then y:key <= x:key. If y is a node in the right subtree of x, then y:key >= x:key.
  • The expected height of a randomly built binary search tree on n distinct keys is O(lg n)

Tree Traversals

  • In-Order - Left , Root, Right
  • Pre-Order - Root, Left, Right
  • Post- Order  Left, Right ,Root

INORDER-TREE-WALK(x)
if x !=NIL
INORDER-TREE-WALK(x:left)
print x:key
INORDER-TREE-WALK(x:right)

Complexity θ(n)


Tree Search

TREE-SEARCH(x,k)
if x == NIL or k == x:key
return x
if k < x:key
return TREE-SEARCH(x:left)
else
return TREE-SEARCH(x:right)


ITERATIVE-TREE-SEARCH(x, k)
while x != NIL and k != x:key
if k < x:key
x = x:left
else
x = x:right
return x

Complexity O(h) - h = Height of the tree

Minimum And Maximum

TREE-MINIMUM(x)
while x:left != NIL
x = x:left
return x

TREE-MAXIMUM(x)
while x:right !=NIL
x = x:right
return x

Complexity O(h)

Height of Tree

int height(node)
{
if (node = null)
    return 0;
else
    left = height(node->left);
    right = height(node->right);
    return 1 + max(left, right);
}

Complexity θ(n)

Tree Insert /Delete

Complexity O(h)


Red Black Trees

  • One of many search-tree schemes that are “balanced” in order to guarantee that basic dynamic-set operations take O(lg n) time in the worst case.
  • By constraining the node colors on any simple path from the root to a leaf, red-black trees ensure that no such path is more than twice as long as any other, so that the tree is approximately balanced.
  • A red-black tree with n internal nodes has height at most 2 lg(n +1)
  • Insert and delete will run in O(lg n) time

  • A red-black tree is a binary tree that satisfies the following red-black properties:
    • Every node is either red or black.
    • The root is black.
    • Every leaf (NIL) is black.
    • If a node is red, then both its children are black.
    • For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.

Trie


  • Trie is an efficient information retrieval data structure.
  • Using trie, search complexities can be brought to optimal limit (key length).
  • If we store keys in binary search tree, a well balanced BST will need time proportional to O(M * log N), where M is maximum string length and N is number of keys in tree.
  • Using trie, we can search the key in O(M) time.
  • However the penalty is on trie storage requirements. Memory requirements of trie is O(ALPHABET_SIZE * key_length * N) where N is number of keys in trie.
  • There are efficient representation of trie nodes (e.g. compressed trie, ternary search tree, etc.) to minimize memory requirements of trie.
  • TRIE has a wide variety of applications in :
    • Spell checking. Word completion
    • Data compression
    • Computational biology
    • Routing table for IP addresses
    • Storing/Querying XML documents etc.
  • For alphabetical keys, each node has an array of (27) pointers to its branches, one for each of the 26 alphabet characters and one for blank (“ ”). The keys are stored in leaf (information) nodes. To access an information node containing a key, we need to move down a series of branch nodes following appropriate branch based on the alphabetical characters composing the key. All trie_node fields that neither intern node nor to an leaf node are represented using null pointers.

No comments:

Post a Comment