0

我很难想象我的程序将如何插入元素。这是老师给我们的代码:

int arr[] = { 3, -2, 11, 7, 12, 1, 4, 5, 33, 13 };
int n = 10;
int cnt = 0;

typedef struct node*po;

struct node {
    int data;
    po left;
    po right;
};

po ibd(int n) {
    po holder;
    if (n>0) {
        int nl = n / 2;
        int nr = n - nl - 1;
        holder = new node;
        holder->data = arr[cnt++];
        holder->left = ibd(nl);
        holder->right = ibd(nr);
        return holder;
    }
    else {
        return NULL;
    }
}

遗憾的是,我无法理解和想象它是如何将元素放入树中的。据我了解,它使用递归分治算法将数组分成两部分并添加元素,但是我无法理解哪个元素成为根。有人可以帮我想象一下插入所有内容后树的外观吗?

4

1 回答 1

0

使用树时,我喜欢画一个像这样的节点:

+--------------+---------------+  
|            Data              |  
+--------------+---------------+  
|  Pointer to  |   Pointer to  |  
| left subtree | right subtree |  
+--------------+---------------+  

当我使一个节点指向另一个节点时,我使用适当的箭头leftright指向新节点的指针。这有助于我可视化这棵树。

有许多资源展示了如何绘制树。

绘制树后,在添加新节点时按照箭头进行操作。

于 2017-02-14T15:30:51.973 回答