半填充二叉搜索树进行测试的最佳方法

时间:2016-12-19 12:40:23

标签: c++ algorithm tree binary-tree

我想设置一个测试,看看多个线程可以多快地更改一棵树,这样做我需要设置一个初始树,其中键的范围为0 - ((2 ^ n)-1)说已插入所有偶数节点以形成平衡树。
说n = 4; 我们需要按顺序插入0,2,4,6,8,10,12,14; [8],[4,12],[0,2,6,10,14]。或[6],[2,10],[0,4,8,14,12]将产生一个平衡的树 目前,我只添加2 ^(n-1)即[8]然后每2 ^(n-2)的第二倍数即[4,12]然后每2 ^(n-3)的第二倍数即[2] [6,10,14]等等,然后我在最后添加0。
这是C ++中的代码,但我对语言的具体内容并不太担心算法本身。

        BST tree = BST();           
        INT64 diff = HMK;//HMK = Half Max Key
        INT64 arrayN[HMK];
        INT64 cur = diff;
        INT64 i = 0;
        Node aNode[HMK];
        while (diff >= 2) {
            cur = diff;
            while (cur < MAX_KEY) {
                aNode[i] = Node();
                aNode[i].key=cur;
                tree.add(&aNode[i]);
                i++;
                cur += 2*diff;
            }
            diff = diff / 2;
        }
        aNode[i] = Node();
        aNode[i].key = 0;
        tree.add(&aNode[i]);

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您以后不关心更改树,最简单的方法是先创建一个骨架树图,然后输入适合该位置的值。

也就是说,由于您希望值介于0和INT_MAX之间,因此根将为INT_MAX/2如果有一个左孩子,那就是INT_MAX/4; 如果有一个合适的孩子,那就是3*INT_MAX/4。位模式应该是显而易见的:100....010 ... , 110 ......`。显然这仅限于N级,因为在深度D处必须设置(N-D)'位。