初识二叉树的一个小问题

今天上课讲了二叉树,结构如下,一直没搞明白这样的二叉树的意义是什么?这样写的话data域不就是固定的了吗,这样还有什么意义呢?是因为还没讲完吗??求解答,感谢!

typedef int datatype_tree;
typedef struct tree_node
{
    datatype_tree data;//数据域
    struct tree_node* lchild;//左子left 
    struct tree_node* rchild;//右子right 
}tree;


tree*  CreateBitree(int n, int i) {
    tree* p = (tree*)malloc(sizeof(tree));
    assert(NULL != p);
    p->lchild = NULL;
    p->rchild = NULL;
    p->data = i;
    if (2 * i <= n) {
        p->lchild = CreateBitree(n, 2 * i);
    }
    else {
        p->lchild = NULL;
    }
    if (2 * i + 1 <= n) {
        p->rchild = CreateBitree(n, 2 * i + 1);
    }
    else {
        p->rchild = NULL;
    }
    return p;
}

树只是一种数据结构,每个叶子结点在树构造的时候肯定是确定的。
实际应用中,会产生不同的树的形状,来解决实际的数据记录和检索