āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻœā§āĻĄāĻŧā§‡ āĻāĻ¸ā§‡āĻ›āĻŋ. āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻ§āĻžāĻ°āĻ• āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨:

  • āĻ¨āĻ¤ā§āĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ āĻ•āĻ°āĻžāĻ¨
  • āĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŽā§āĻŦāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻ°āĻžāĻ¨
  • āĻ•ā§āĻ°āĻŽāĻŋāĻ• āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĒāĻžāĻ¨
  • āĻ¤āĻĨā§āĻ¯ āĻ¸āĻžāĻœāĻžāĻ¨ā§‹ āĻ†āĻ•āĻžāĻ°ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ

āĻĄā§‡āĻŸāĻž āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡, āĻ—āĻ āĻ¨ āĻĻā§āĻ°ā§āĻ¤ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ—āĻ¤āĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻž āĻ†āĻŦāĻļā§āĻ¯āĻ•. āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻŽāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĒāĻžāĻ¤ā§āĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻ¸āĻŸāĻŋāĻĄāĻŋ. āĻāĻ‡ āĻĒāĻĨāĻŸāĻŋ āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽā§āĻ•ā§āĻŸ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻāĻŦāĻ‚ āĻŦā§‹āĻāĻž āĻ—ā§‡āĻ˛ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻ° āĻ¨āĻŋāĻœā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤ āĻāĻ•āĻŽāĻžāĻ¤ā§āĻ° āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻ¯āĻž āĻŽāĻ¨ā§‡ āĻāĻ¸ā§‡āĻ›āĻŋāĻ˛ āĻ¤āĻž āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ—āĻžāĻ› āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĨ¤ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ¸āĻžāĻœāĻžāĻ¨ā§‹ āĻ†āĻ•āĻžāĻ°ā§‡ āĻĄā§‡āĻŸāĻž āĻĻā§āĻ°ā§āĻ¤ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ, āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻāĻŦāĻ‚ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻž āĻ…āĻŦāĻļāĻŋāĻˇā§āĻŸ āĻĨāĻžāĻ•ā§‡ āĻ¤āĻž āĻšāĻ˛ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§‚āĻšā§€āĻ•āĻ°āĻŖ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ—āĻžāĻ›ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ˛ā§‡ āĻ¸ā§‚āĻšāĻ•āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤

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.

āĻāĻ° āĻĒāĻ°ā§‡, āĻ†āĻ¸ā§āĻ¨ āĻāĻ‡ āĻœāĻžāĻ¤ā§€āĻ¯āĻŧ āĻ—āĻžāĻ›ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻœā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĻāĻŋāĻ•ā§‡ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ‡āĨ¤ āĻ•āĻžāĻ˛ā§‹ āĻ¨ā§‹āĻĄ āĻ•ā§€ āĻ°āĻ™ā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻŦā§‡ (āĻŽāĻžāĻ¨āĻŸāĻŋ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻŦā§‡ āĻ¨āĻž, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¨āĻ¯āĻŧ), āĻ˛āĻžāĻ˛ - āĻ—āĻŋāĻāĻŸā§‡āĻ° āĻ“āĻœāĻ¨, āĻ¸āĻŦā§āĻœ - āĻ¨ā§‹āĻĄ āĻ¸ā§‚āĻšāĻ•āĨ¤

āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ—āĻžāĻ› āĻ–āĻžāĻ˛āĻŋ āĻĨāĻžāĻ•ā§‡, āĻ¤āĻ–āĻ¨ āĻāĻ° āĻ“āĻœāĻ¨ 0 āĻšāĻ¯āĻŧāĨ¤ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻŽā§‚āĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻ—āĻžāĻ›ā§‡āĻ° āĻ“āĻœāĻ¨ āĻšāĻ¯āĻŧ 1, āĻŽā§‚āĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻ“āĻœāĻ¨ 1 āĻšāĻ¯āĻŧāĨ¤ āĻŽā§‚āĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻ“āĻœāĻ¨ āĻ—āĻžāĻ›ā§‡āĻ° āĻ“āĻœāĻ¨āĨ¤

āĻ†āĻ°ā§‹ āĻ•āĻŋāĻ›ā§ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›
āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›
āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›
āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ˛ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¨ā§‹āĻĄā§‡āĻ° āĻ¨āĻŋāĻšā§‡ āĻ¯āĻžāĻ‡ āĻāĻŦāĻ‚ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ“āĻœāĻ¨ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ° āĻŦāĻžāĻĄāĻŧāĻžāĻ‡āĨ¤ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¨ā§‹āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻāĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ“āĻœāĻ¨ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ 1. āĻ¯āĻĻāĻŋ āĻāĻ‡ āĻœāĻžāĻ¤ā§€āĻ¯āĻŧ āĻ•ā§€ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻŽāĻžāĻ¨āĻŸāĻŋ āĻ“āĻ­āĻžāĻ°āĻ°āĻžāĻ‡āĻŸ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ°ā§āĻŸ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻŦ, āĻ†āĻŽāĻ°āĻž āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ“āĻœāĻ¨ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°āĻŦāĨ¤
āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻšā§‡ āĻ¯āĻžāĻ‡ āĻāĻŦāĻ‚ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻ“āĻœāĻ¨ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻŋāĨ¤

āĻ¸ā§‚āĻšāĻ•ā§‡āĻ°

āĻāĻ–āĻ¨ āĻ†āĻ¸ā§āĻ¨ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¨ā§‹āĻĄ āĻ¸ā§‚āĻšā§€ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸ā§‚āĻšāĻ• āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡ āĻ¨āĻž, āĻāĻŸāĻŋ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻ“āĻœāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¯āĻĻāĻŋ āĻ¤āĻžāĻ°āĻž āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸ā§‚āĻšāĻ• āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ āĻ‰āĻĒāĻ°) āĻ—āĻžāĻ›ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻĒāĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ¸ā§‚āĻšā§€ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤
āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻšāĻžāĻ•ā§āĻˇā§āĻˇ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻšāĻ˛ā§āĻ¨. āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ—āĻžāĻ›āĻŸāĻŋ āĻ–āĻžāĻ˛āĻŋ, āĻ†āĻ¸ā§āĻ¨ āĻāĻŸāĻŋāĻ¤ā§‡ 1āĻŽ āĻ¨ā§‹āĻĄ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋ:

āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻĒā§āĻ°āĻĨāĻŽ āĻ¨ā§‹āĻĄā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‚āĻšāĻ• āĻ†āĻ›ā§‡ 0, āĻāĻŦāĻ‚ āĻāĻ–āĻ¨ 2 āĻŸāĻŋ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ¸āĻŽā§āĻ­āĻŦāĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻŸāĻŋāĻ¤ā§‡, āĻŽā§‚āĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻŸāĻŋāĻ° āĻ¸ā§‚āĻšāĻ• āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻŦā§‡, āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻŸāĻŋāĻ¤ā§‡ āĻāĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤

āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻŽā§‚āĻ˛ā§‡, āĻŦāĻžāĻŽ āĻ¸āĻžāĻŦāĻŸā§āĻ°āĻŋāĻ° āĻ“āĻœāĻ¨ 1āĨ¤

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡:

āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻŽā§‚āĻ˛ā§‡āĻ° āĻ¸ā§‚āĻšā§€ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻ•āĻžāĻ°āĻŖ āĻāĻ° āĻŦāĻžāĻŽ āĻ‰āĻĒāĻŦā§ƒāĻ•ā§āĻˇā§‡āĻ° āĻ“āĻœāĻ¨ 0 āĻ°āĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ¸ā§‚āĻšāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ° āĻŦāĻžāĻŽ āĻ‰āĻĒāĻŦā§ƒāĻ•ā§āĻˇā§‡āĻ° āĻ“āĻœāĻ¨ + āĻĒāĻŋāĻ¤āĻžāĻŽāĻžāĻ¤āĻžāĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻŸāĻŋ āĻ•ā§€?, āĻāĻŸāĻŋ āĻ¸ā§‚āĻšāĻ• āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ°, āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ¨ 0, āĻ•āĻžāĻ°āĻŖ āĻŽā§‚āĻ˛ā§‡āĻ° āĻ•ā§‹āĻ¨ āĻĒāĻŋāĻ¤āĻžāĻŽāĻžāĻ¤āĻž āĻ¨ā§‡āĻ‡āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŸāĻž āĻ¸āĻŦ āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻŦāĻžāĻŽ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻŦāĻž āĻĄāĻžāĻ¨ āĻāĻ• āĻ¨āĻŋāĻšā§‡ āĻ¯ā§‡āĻ¤ā§‡. āĻ¯āĻĻāĻŋ āĻŦāĻžāĻŽ āĻĻāĻŋāĻ•ā§‡ āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ°ā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ¸ā§‚āĻšāĻ•āĻŸāĻŋ āĻĄāĻžāĻ¨āĻĻāĻŋāĻ•ā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋāĨ¤

āĻ¸ā§‚āĻšāĻŋāĻŦāĻĻā§āĻ§ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ•ā§€ 8 (āĻŽā§‚āĻ˛ā§‡āĻ° āĻĄāĻžāĻ¨ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨) āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻ¸ā§‚āĻšāĻ• āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ āĻšāĻ˛ "āĻ°ā§āĻŸ āĻ‡āĻ¨āĻĄā§‡āĻ•ā§āĻ¸" + "8 āĻ•ā§€ āĻ¸āĻš āĻ¨ā§‹āĻĄā§‡āĻ° āĻŦāĻžāĻŽ āĻ¸āĻžāĻŦāĻŸā§āĻ°āĻŋāĻ° āĻ“āĻœāĻ¨" + "1" == 3 + 2 + 1 == 6
āĻ•ā§€ 6 āĻ¸āĻš āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻŸāĻŋāĻ° āĻ¸ā§‚āĻšāĻ•āĻŸāĻŋ āĻšāĻŦā§‡ "āĻ°ā§āĻŸ āĻ¸ā§‚āĻšāĻ•" + 1 == 3 + 1 == 4

āĻ¤āĻĻāĻ¨ā§āĻ¸āĻžāĻ°ā§‡, āĻ¸ā§‚āĻšāĻ• āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĒā§‡āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻŽā§āĻ›āĻ¤ā§‡ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—ā§‡ āĻ“ (āĻ˛āĻ— āĻāĻ¨), āĻ•āĻžāĻ°āĻŖ āĻĒāĻ›āĻ¨ā§āĻĻāĻ¸āĻ‡ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĒā§‡āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻāĻŸāĻŋ āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ (āĻŽā§‚āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻāĻ‡ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻŸāĻŋāĻ¤ā§‡ āĻ¯āĻžāĻ¨)āĨ¤

āĻ—āĻ­ā§€āĻ°āĻ¤āĻž

āĻ“āĻœāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ—āĻžāĻ›ā§‡āĻ° āĻ—āĻ­ā§€āĻ°āĻ¤āĻžāĻ“ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ­āĻžāĻ°āĻ¸āĻžāĻŽā§āĻ¯ āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĨ¤
āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ“āĻœāĻ¨āĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĨā§‡āĻ•ā§‡ 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));
}

āĻĢāĻ˛āĻžāĻĢāĻ˛

  • āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ āĻ˜āĻŸā§‡ āĻ“ (āĻ˛āĻ— āĻāĻ¨)
  • āĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ¨āĻŽā§āĻŦāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻšāĻ¯āĻŧ āĻ“ (āĻ˛āĻ— āĻāĻ¨)
  • āĻ•ā§āĻ°āĻŽāĻŋāĻ• āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ“ (āĻ˛āĻ— āĻāĻ¨)

āĻ—āĻ¤āĻŋ āĻ“ (āĻ˛āĻ— āĻāĻ¨) āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ¸āĻ¤ā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ°ā§āĻĨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĄā§‡āĻŸāĻž āĻ¸āĻžāĻœāĻžāĻ¨ā§‹ āĻ†āĻ•āĻžāĻ°ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ†āĻŽāĻŋ āĻœāĻžāĻ¨āĻŋ āĻ¨āĻž āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻ‰āĻĒāĻ¯ā§‹āĻ—ā§€ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ—āĻžāĻ›āĻ—ā§āĻ˛āĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¤āĻž āĻ†āĻŦāĻžāĻ° āĻŦā§‹āĻāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‡āĻŦāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻāĻ§āĻžāĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ—ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻāĨ¤

āĻ°ā§‡āĻĢāĻžāĻ°ā§‡āĻ¨ā§āĻ¸

āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻ—āĻ¤āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋāĻ¤ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻĄā§‡āĻŸāĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ—āĻžāĻ› āĻ­āĻ°ā§‡ āĻ¯āĻžāĻšā§āĻ›ā§‡ 1000000 āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻāĻŦāĻ‚ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ•ā§āĻ°āĻŽāĻŋāĻ• āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž, āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ āĻāĻŦāĻ‚ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ 1000000 āĻāĻ•āĻĻāĻž. āĻāĻŸāĻžāĻ‡ 3000000 āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻŦā§‡āĻļ āĻ­āĻžāĻ˛ āĻšāĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ ~ 8 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄ.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨