【发布时间】:2017-02-14 15:06:59
【问题描述】:
我很难想象我的程序将如何插入元素。 这是老师给我们的代码:
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;
}
}
很遗憾,我无法理解和想象它是如何将元素放入树中的。据我了解,它使用递归分治算法将数组分成两部分并添加元素,但是我无法理解哪个元素成为根。有人可以帮我想象一下插入所有内容后树的外观吗?
【问题讨论】:
-
你应该用你的调试器单步调试代码,看看它做了什么。
-
这个问题你应该考虑使用c标签,而不是c++标签。
-
当老师的函数签名是
po ibd(int n)你担心代码清晰的未来 -
@FrançoisAndrieux 不是真的,那里有一个
new。但这是真的,这只是 C 的变相(以及 bad C)。 -
顺便说一句,在 C++ 中,你不需要
typedef struct,typedef不是必需的。
标签: c++ algorithm tree insertion-order