αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž”αž‰αŸ’αž αžΆαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž’αž»αž„αž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž˜αž»αžαž„αžΆαžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • αž”αž‰αŸ’αž…αžΌαž›αž’αžΆαžαž»αžαŸ’αž˜αžΈαŸ”
  • αž™αž€αž’αžΆαžαž»αž…αŸαž‰αžŠαŸ„αž™αž›αŸαžαžŸαŸ€αžšαŸ€αž›
  • αž‘αž‘αž½αž›αž”αžΆαž“αž’αžΆαžαž»αžŠαŸ„αž™αž›αŸαžαž’αž˜αŸ’αž˜αžαžΆαŸ”
  • αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžαž˜αŸ’αžšαŸ€αž”

αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αž“αž·αž„αžŠαž€αž…αŸαž‰αž₯αžαžˆαž”αŸ‹αžˆαžš αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαžαŸ‚αž’αžΆαž“αžΆαž”αžΆαž“αž“αžΌαžœαž›αŸ’αž”αžΏαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž›αžΏαž“αŸ” αžŠαŸ†αž”αžΌαž„αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αž“αž»αžœαžαŸ’αžαžšαžΏαž„αž”αŸ‚αž”αž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎαž’αž»αž„αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž–αžΈ std. αž•αŸ’αž›αžΌαžœαž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž„αžšαžΆαž‡αŸ’αž™αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž‘αŸ αž αžΎαž™αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž”αžΆαž“αž˜αž€αžαžΆαžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž’αž“αž»αžœαžαŸ’αžαž’αŸ’αžœαžΈαž˜αž½αž™αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ” αžšαžΏαž„αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž˜αž€αž€αŸ’αž“αž»αž„αž‚αŸ†αž“αž·αžαž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž˜αŸ‚αž€αž’αžΆαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αžœαžΆαž”αŸ†αž–αŸαž‰αžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αžšαž αŸαžŸ αž€αžΆαžšαž›αž»αž” αž“αž·αž„αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžαž˜αŸ’αžšαŸ€αž”αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αŸ…αžŸαŸαžŸαžŸαž›αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž’αžΆαžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„αž‚αžŽαž“αžΆαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŠαžΎαž˜αžˆαžΎαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”

struct node_s {    
    data_t data;

    uint64_t weight; // вСс ΡƒΠ·Π»Π°

    node_t *left;
    node_t *right;

    node_t *parent;
};

αž’αžαŸ’αžαž”αž‘αž“αžΉαž„αž˜αžΆαž“αžšαžΌαž”αž—αžΆαž– αž“αž·αž„αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž€αžΌαžŠαŸ” αž›αŸαžαž€αžΌαžŠαž’αžΆαž…αž˜αžΎαž›αž”αžΆαž“αžαžΆαž˜αžαŸ†αžŽαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αž‘αŸ†αž„αž“αŸ‹

αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž…αŸ†αžŽαž»αž…αž“αŸαŸ‡ αž˜αŸ‚αž€αž’αžΆαž„αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž”αž“αŸ’αžαž·αž…αž”αž“αŸ’αžαž½αž… αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈ αž‘αž˜αŸ’αž„αž“αŸ‹ αžαŸ’αž“αžΆαŸ†αž„αŸ” αž‘αŸ†αž„αž“αŸ‹αžαŸ’αž“αžΆαŸ†αž„αž‚αžΊ αž…αŸ†αž“αž½αž“αž€αžΌαž“αž…αŸ…αžšαž”αžŸαŸ‹αžαŸ’αž“αžΆαŸ†αž„αž“αŸαŸ‡αŸ” + 1 (αž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαž’αžΆαžαž»αžαŸ‚αž˜αž½αž™) αŸ”

αž˜αž»αžαž„αžΆαžšβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž‘αž‘αž½αž›β€‹αž‘αž˜αŸ’αž„αž“αŸ‹β€‹αžαŸ’αž“αžΆαŸ†αž„αŸ–

uint64_t bntree::get_child_weight(node_t *node) {
    if (node) {
        return node->weight;
    }

    return 0;
}

αž‘αŸ†αž„αž“αŸ‹αž“αŸƒαžŸαž“αŸ’αž›αžΉαž€αž‚αžΊαžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„ 0.

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž™αžΎαž„αž”αž“αŸ’αžαž‘αŸ…αž€αžΆαžšαžαŸ†αžŽαžΆαž„αžŠαŸ‚αž›αž˜αžΎαž›αžƒαžΎαž‰αž“αŸƒαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŠαžΎαž˜αžˆαžΎαž”αŸ‚αž”αž“αŸαŸ‡αŸ” αžαŸ’αž˜αŸ… αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžαŸ’αž“αžΆαŸ†αž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαž–αžŽαŸŒ (αžαž˜αŸ’αž›αŸƒαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‘αŸαž–αŸ’αžšαŸ„αŸ‡αž“αŸαŸ‡αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‘αŸ) αž€αŸ’αžšαž αž˜ - αž‘αŸ†αž„αž“αŸ‹ knot, αž”αŸƒαžαž„αŸ” - αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžαŸ’αž“αžΆαŸ†αž„αŸ”

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŠαžΎαž˜αžˆαžΎαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αž‘αŸ αž‘αž˜αŸ’αž„αž“αŸ‹αžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊ 0αŸ” αž…αžΌαžšαž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž»αž«αžŸαž‘αŸ…αžœαžΆαŸ–

αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αž‘αŸ†αž„αž“αŸ‹αžšαž”αžŸαŸ‹αž˜αŸ‚αž€αž’αžΆαž„αž€αŸ’αž›αžΆαž™αž‡αžΆ 1 αž‘αŸ†αž„αž“αŸ‹αž“αŸƒαž’αžΆαžαž»αž«αžŸαž€αŸ’αž›αžΆαž™αž‡αžΆ 1. αž‘αŸ†αž„αž“αŸ‹αž“αŸƒαž’αžΆαžαž»αž«αžŸαž‚αžΊαž‡αžΆαž‘αŸ†αž„αž“αŸ‹αž“αŸƒαžŠαžΎαž˜αžˆαžΎαŸ”

αžαŸ„αŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž»αž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αŸ€αžαŸ–

αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜
αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜
αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜
αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž’αžΆαžαž»αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αž™αžΎαž„αž…αž»αŸ‡αž€αŸ’αžšαŸ„αž˜αžαŸ’αž“αžΆαŸ†αž„ αž“αž·αž„αž”αž„αŸ’αž€αžΎαž“αž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž“αžΆαŸ†αž„αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž‘αž˜αŸ’αž„αž“αŸ‹αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž‘αŸ…αž±αŸ’αž™αžœαžΆαŸ” 1. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„αž”αŸ‚αž”αž“αŸαŸ‡αž˜αžΆαž“αžšαž½αž…αž αžΎαž™ αž“αŸ„αŸ‡αž™αžΎαž„αž“αžΉαž„αžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž–αžΈαž›αžΎαžαž˜αŸ’αž›αŸƒ αž αžΎαž™αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž«αžŸαžœαž·αž‰ αžŠαŸ„αž™αž›αž»αž”αž…αŸ„αž›αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αŸ”
αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαŸ’αž“αžΆαŸ†αž„αž˜αž½αž™αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰ αž“αŸ„αŸ‡αž™αžΎαž„αž…αž»αŸ‡αž€αŸ’αžšαŸ„αž˜ αž αžΎαž™αž”αž“αŸ’αžαž™αž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αŸ”

αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž”αž“αŸ’αžαž‘αŸ…αžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αžαŸ’αž“αžΆαŸ†αž„αŸ” αžαŸ’αž“αžΆαŸ†αž„αž˜αž·αž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž›αž·αž”αž·αž€αŸ’αžšαž˜αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž‘αŸ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžŽαž“αžΆαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž“αŸ„αŸ‡αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžš ធូរ (n) αž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‚αž€αž’αžΆαž„αŸ”
αž…αžΌαžšαž”αž“αŸ’αžαž‘αŸ…αž€αžΆαžšαžαŸ†αžŽαžΆαž„αžŠαŸ‚αž›αž˜αžΎαž›αžƒαžΎαž‰αŸ” αž˜αŸ‚αž€αž’αžΆαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αž‘αŸ αžαŸ„αŸ‡αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž“αžΆαŸ†αž„αž‘αžΈ 1 αž‘αŸ…αžœαžΆαŸ–

αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αžαŸ’αž“αžΆαŸ†αž„αž‘αžΈαž˜αž½αž™αž˜αžΆαž“αž›αž·αž”αž·αž€αŸ’αžšαž˜ 0αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡ 2 αž€αžšαžŽαžΈαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αžΈαž˜αž½αž™ αž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸƒαž’αžΆαžαž»αž«αžŸαž“αžΉαž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž‘αžΈαž–αžΈαžšαžœαžΆαž“αžΉαž„αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸαŸ”

αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αž“αŸ…αž«αžŸ αž˜αŸ‚αž€αž’αžΆαž„αžšαž„αžαžΆαž„αž†αŸ’αžœαŸαž„αž˜αžΆαž“αž‘αž˜αŸ’αž„αž“αŸ‹ ៑.

αž€αžšαžŽαžΈαž‘αžΈαž–αžΈαžšαŸ–

αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸƒαž«αžŸαž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αžšαž„αžαžΆαž„αž†αŸ’αžœαŸαž„αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αžαŸ‚ 0αŸ”

αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸβ€‹αž“αŸƒβ€‹αžαŸ’αž“αžΆαŸ†αž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‚αžŽαž“αžΆβ€‹αž‡αžΆβ€‹αž‘αž˜αŸ’αž„αž“αŸ‹β€‹αž“αŸƒβ€‹αž’αž“αž»αž˜αŸ‚αž€αž’αžΆαž„β€‹αžαžΆαž„β€‹αž†αŸ’αžœαŸαž„β€‹αžšαž”αžŸαŸ‹β€‹αžœαžΆ + αž›αŸαžβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž†αŸ’αž›αž„β€‹αž–αžΈβ€‹αž˜αŸαŸ” αžαžΎβ€‹αž›αŸαžβ€‹αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž›αŸαžβ€‹αž’αŸ’αžœαžΈ?, αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸβ€‹αžšαžΆαž”αŸ‹, αžŠαŸ†αž”αžΌαž„β€‹αžœαžΆβ€‹αžŸαŸ’αž˜αžΎβ€‹αž“αžΉαž„ 0, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αž«αžŸαž˜αž·αž“αž˜αžΆαž“αž˜αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž™αžΎαž„αž…αž»αŸ‡αž‘αŸ…αž€αžΌαž“αžαžΆαž„αž†αŸ’αžœαŸαž„αž¬αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αžαžΆαž„αž†αŸ’αžœαŸαž„ αž“αŸ„αŸ‡αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž”αž‰αŸ’αž‡αžšαž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž‘αŸ…αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αŸ”

αž˜αŸ‚αž€αž’αžΆαž„αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜

αž§αž‘αžΆαž αžšαžŽαŸ αžšαž”αŸ€αž”β€‹αžŠαŸ‚αž›β€‹αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸβ€‹αž“αŸƒβ€‹αž’αžΆαžαž»β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž‚αž“αŸ’αž›αžΉαŸ‡ 8 (αž€αžΌαž“β€‹αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœβ€‹αž“αŸƒβ€‹αž«αžŸ) αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‚αžŽαž“αžΆαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆ "αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž«αžŸ" + "αž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αžšαž„αžαžΆαž„αž†αŸ’αžœαŸαž„αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž˜αžΆαž“αž‚αž“αŸ’αž›αžΉαŸ‡ 8" + "1" == 3 + 2 + 1 == 6
αž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸƒαž’αžΆαžαž»αžŠαŸ‚αž›αž˜αžΆαž“αž‚αž“αŸ’αž›αžΉαŸ‡ 6 αž“αžΉαž„αž‡αžΆ "αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž«αžŸ" + 1 == 3 + 1 == 4

αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“ αž“αž·αž„αž›αž»αž”αž’αžΆαžαž»αžŠαŸ„αž™αž›αž·αž”αž·αž€αŸ’αžšαž˜ O (log n)αžŠαŸ„αž™β€‹αžŸαžΆαžšβ€‹αžαŸ‚β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž’αžΆαžαž»β€‹αžŠαŸ‚αž›β€‹αž…αž„αŸ‹β€‹αž”αžΆαž“β€‹αž™αžΎαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αžαŸ‚β€‹αžŸαŸ’αžœαŸ‚αž„β€‹αžšαž€β€‹αžœαžΆβ€‹αž‡αžΆβ€‹αžŠαŸ†αž”αžΌαž„ (αž…αž»αŸ‡β€‹αž–αžΈ root αž‘αŸ…β€‹αž’αžΆαžαž»β€‹αž“αŸαŸ‡β€‹) αŸ”

αž‡αž˜αŸ’αžšαŸ…

αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‘αž˜αŸ’αž„αž“αŸ‹αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž‚αžŽαž“αžΆαž‡αž˜αŸ’αžšαŸ…αž“αŸƒαžŠαžΎαž˜αžˆαžΎαž•αž„αžŠαŸ‚αžšαŸ” αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž»αž›αŸ’αž™αž—αžΆαž–αŸ”
αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αž‚αžαŸ‹αž‘αŸ…αž›αŸαžαž‘αžΈαž˜αž½αž™αž‘αŸ…αžαžΆαž˜αž–αž›αž“αŸƒ 2 αžŠαŸ‚αž›αž’αŸ†αž‡αžΆαž„αž¬αžŸαŸ’αž˜αžΎαž“αžΉαž„αž‘αž˜αŸ’αž„αž“αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž αžΎαž™αž™αž€αž›αŸ„αž€αžΆαžšαžΈαžαž‚αŸ„αž›αž–αžΈαžšαž–αžΈαžœαžΆαŸ” αž“αŸαŸ‡αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαž‡αž˜αŸ’αžšαŸ…αž“αŸƒαžŠαžΎαž˜αžˆαžΎαžŠαŸ„αž™αžŸαž“αŸ’αž˜αžαžαžΆαžœαžΆαž˜αžΆαž“αžαž»αž›αŸ’αž™αž—αžΆαž–αŸ” αž˜αŸ‚αž€αž’αžΆαž„αž˜αžΆαž“αžαž»αž›αŸ’αž™αž—αžΆαž–αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αž‰αŸ’αž…αžΌαž›αž’αžΆαžαž»αžαŸ’αž˜αžΈαŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž•αŸ’αžαž›αŸ‹αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž±αŸ’αž™αžŠαžΎαž˜αžˆαžΎαž˜αžΆαž“αžαž»αž›αŸ’αž™αž—αžΆαž–αž‘αŸαŸ” αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαžαž»αž›αŸ’αž™αž—αžΆαž–αŸ”

αž€αžΌαžŠαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ†αž›αŸ‚αž„αž‘αž˜αŸ’αž„αž“αŸ‹αž‘αŸ…αž‡αž˜αŸ’αžšαŸ…αŸ”

/*
 * Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число Π² стСпСни 2, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ большС ΠΈΠ»ΠΈ Ρ€ΠΎΠ²Π½ΠΎ x
 */
uint64_t bntree::cpl2(uint64_t x) {
    x = x - 1;
    x = x | (x >> 1);
    x = x | (x >> 2);
    x = x | (x >> 4);
    x = x | (x >> 8);
    x = x | (x >> 16);
    x = x | (x >> 32);

    return x + 1;
}

/*
 * Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ ΠΎΡ‚ числа
 */
long bntree::ilog2(long d) {
    int result;
    std::frexp(d, &result);
    return result - 1;
}

/*
 * ВСс ΠΊ Π³Π»ΡƒΠ±ΠΈΠ½Π΅
 */
uint64_t bntree::weight_to_depth(node_t *p) {
    if (p == NULL) {
        return 0;
    }

    if (p->weight == 1) {
        return 1;
    } else if (p->weight == 2) {
        return 2;
    }

    return this->ilog2(this->cpl2(p->weight));
}

αž›αž‘αŸ’αž’αž•αž›

  • αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž’αžΆαžαž»αžαŸ’αž˜αžΈαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ O (log n)
  • αž€αžΆαžšαž›αž»αž”αž’αžΆαžαž»αžŠαŸ„αž™αž›αŸαžαžŸαŸ€αžšαŸ€αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ O (log n)
  • αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αž’αžΆαžαž»αžŠαŸ„αž™αž›αŸαžαžŸαŸ€αžšαŸ€αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ O (log n)

αž›αŸ’αž”αžΏαž“ O (log n) αž™αžΎαž„αž…αŸ†αžŽαžΆαž™αž›αžΎαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžαž˜αŸ’αžšαŸ€αž”αŸ”

αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžŠαžΉαž„αžαžΆαž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαžŠαŸ‚αž›αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸ„αŸ‡αž‘αŸαŸ” αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž›αŸ’αž”αŸ‚αž„αž•αŸ’αž‚αž»αŸ†αžšαžΌαž”αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžŠαžΎαž˜αžˆαžΎαž’αŸ’αžœαžΎαž€αžΆαžšαŸ” αžŸαžΌαž˜β€‹αž’αžšαž‚αž»αžŽβ€‹αž…αŸ†αž–αŸ„αŸ‡β€‹αž€αžΆαžšβ€‹αž™αž€αž…αž·αžαŸ’αžβ€‹αž‘αž»αž€αžŠαžΆαž€αŸ‹β€‹αžšαž”αžŸαŸ‹β€‹αž›αŸ„αž€αž’αŸ’αž“αž€αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαž™αŸ„αž„

αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαžΆαž€αž›αŸ’αž”αž„ αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž›αŸ’αž”αžΏαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αžŠαžΎαž˜αžˆαžΎαž€αŸ†αž–αž»αž„αž”αŸ†αž–αŸαž‰ 1000000 αž’αžΆαžαž»αŸ” αž αžΎαž™αž˜αžΆαž“αž€αžΆαžšαž›αž»αž”αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž’αžΆαžαž» 1000000 αž˜αŸ’αžαž„αŸ” αž“αŸ„αŸ‡αž‚αžΊαž‡αžΆ 3000000 αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αž›αž‘αŸ’αž’αž•αž›αž”αžΆαž“αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆαž›αŸ’αž’αžŽαžΆαžŸαŸ‹ ~ 8 αžœαž·αž“αžΆαž‘αžΈαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹