Trees and Graphs‎ > ‎

Binary Tree to Array Conversion

Given a complete binary tree, convert it to an array and vice versa.

int[] binTree2Array(Node n)
{
    int[] ret = new int[getBinTreeNodeCount(n) + 1];
    // Skipping index 0 for simplicity
    binTree2ArrayWorker(n, ret, 1);
 
    return ret;
}
 
void binTree2ArrayWorker(Node n, int[] arr, int i)
{
    if (n == null || i > arr.Length - 1)
        return;
 
    arr[i] = n.val;
    binTree2ArrayWorker(n.left, arr, i * 2);
    binTree2ArrayWorker(n.right, arr, i * 2 + 1);
}
Node array2BinTree(int[] arr, int i)
{
    if (i > arr.Length - 1)
        return null;
 
    Node n = new Node(arr[i]);
    n.left = array2BinTree(arr, i * 2);
    n.right = array2BinTree(arr, i * 2 + 1);
 
    return n;
}