āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻŸā§āĻ°āĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ¸āĻžāĻ°ā§āĻš āĻŸā§āĻ°āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻŦā§‡āĻ¨

āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻ¨āĻž

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

āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻŋ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻŸāĻž āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•āĻšāĻžāĻ° āĻ¯āĻž āĻ•āĻŋāĻ¨āĻžāĻ°āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ¨ā§‹āĻĄ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤āĨ¤ āĻ†āĻŽāĻ°āĻž āĻŦāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ—āĻžāĻ› āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°āĻžāĻĢā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ—āĻžāĻ› āĻ†āĻ›ā§‡:

āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻŸā§āĻ°āĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ¸āĻžāĻ°ā§āĻš āĻŸā§āĻ°āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻŦā§‡āĻ¨

āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ—āĻžāĻ› āĻ¨āĻ¯āĻŧ! āĻ¸āĻŦāĻ‡ āĻ¤ā§‹ āĻ•āĻžāĻŸāĻžāĻ° āĻ¨āĻŋāĻšā§‡!

āĻĒāĻ°āĻŋāĻ­āĻžāĻˇāĻž

āĻŽā§‚āĻ˛

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

āĻĒāĻŋāĻ¤āĻžāĻŽāĻžāĻ¤āĻž/āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨

āĻ°ā§āĻŸ āĻŦā§āĻ¯āĻ¤ā§€āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ āĻŋāĻ• āĻāĻ• āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻĨāĻžāĻ•ā§‡ āĻ¯āĻž āĻ…āĻ¨ā§āĻ¯ āĻ¨ā§‹āĻĄ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¨ā§‹āĻĄāĻ•ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻ…āĻ­āĻŋāĻ­āĻžāĻŦāĻ• āĻāĻ‡ āĻ¨ā§‹āĻĄ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡āĻ° āĻ¨ā§€āĻšā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄāĻ•ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻŦāĻ‚āĻļāĻ§āĻ° āĻāĻ‡ āĻ¨ā§‹āĻĄ āĻāĻ•āĻŸāĻž āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ•āĨ¤ āĻ¨ā§‹āĻĄ B āĻ¨āĻŋāĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ° āĻĒā§āĻ¯āĻžāĻ°ā§‡āĻ¨ā§āĻŸ āĻšāĻŦā§‡ āĻ¨ā§‹āĻĄ A, āĻāĻŦāĻ‚ āĻāĻ° āĻŦāĻžāĻšā§āĻšāĻžāĻ°āĻž āĻšāĻŦā§‡ āĻ¨ā§‹āĻĄ D, E āĻāĻŦāĻ‚ FāĨ¤

āĻšāĻžāĻĻāĻ°

āĻ¯ā§‡ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ•ā§‹āĻ¨ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻ¨ā§‡āĻ‡ āĻ¤āĻžāĻ•ā§‡ āĻ—āĻžāĻ›ā§‡āĻ° āĻĒāĻžāĻ¤āĻž āĻŦāĻ˛ā§‡āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ¨ā§‹āĻĄ D, E, F, G, I, J, K āĻĒāĻžāĻ¤āĻž āĻšāĻŦā§‡āĨ¤

āĻāĻŸāĻŋ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻĒāĻ°āĻŋāĻ­āĻžāĻˇāĻžāĨ¤ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ§āĻžāĻ°āĻŖāĻž āĻĒāĻ°ā§‡ āĻ†āĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻŦā§‡. āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ› āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ—āĻžāĻ› āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡ āĻĻā§āĻŸāĻŋāĻ° āĻŦā§‡āĻļāĻŋ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻĨāĻžāĻ•āĻŦā§‡ āĻ¨āĻžāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯ā§‡āĻŽāĻ¨ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĨā§‡āĻ•ā§‡ āĻ—āĻžāĻ›āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻšāĻŦā§‡ āĻ¨āĻž, āĻ•āĻžāĻ°āĻŖ āĻ¨ā§‹āĻĄ B āĻāĻŦāĻ‚ H āĻāĻ° āĻĻā§āĻŸāĻŋāĻ° āĻŦā§‡āĻļāĻŋ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻŸā§āĻ°āĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ¸āĻžāĻ°ā§āĻš āĻŸā§āĻ°āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻŦā§‡āĻ¨

āĻ—āĻžāĻ›ā§‡āĻ° āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¯ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻ¤āĻĨā§āĻ¯ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ—āĻžāĻ› āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ› āĻ¯āĻžāĻ° āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

  1. āĻŦāĻžāĻŽ āĻāĻŦāĻ‚ āĻĄāĻžāĻ¨ āĻ‰āĻĒāĻŦā§ƒāĻ•ā§āĻˇ āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ—āĻžāĻ›āĨ¤
  2. āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻ¨ā§‹āĻĄ X āĻāĻ° āĻŦāĻžāĻŽ āĻ¸āĻžāĻŦāĻŸā§āĻ°āĻŋāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨ā§‹āĻĄā§‡āĻ° āĻĄā§‡āĻŸāĻž āĻ•ā§€ āĻŽāĻžāĻ¨ āĻ¨ā§‹āĻĄ X āĻāĻ° āĻĄā§‡āĻŸāĻž āĻ•ā§€ āĻŽāĻžāĻ¨ā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻŽāĨ¤
  3. āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻ¨ā§‹āĻĄ X-āĻāĻ° āĻĄāĻžāĻ¨ āĻ¸āĻžāĻŦāĻŸā§āĻ°āĻŋāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨ā§‹āĻĄā§‡āĻ° āĻĄā§‡āĻŸāĻž āĻ•ā§€ āĻŽāĻžāĻ¨ āĻ¨ā§‹āĻĄ X-āĻāĻ° āĻĄā§‡āĻŸāĻž āĻ•ā§€-āĻāĻ° āĻŽāĻžāĻ¨ā§‡āĻ° āĻĨā§‡āĻ•ā§‡ āĻŦā§‡āĻļāĻŋ āĻŦāĻž āĻ¸āĻŽāĻžāĻ¨āĨ¤

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

āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻŸā§āĻ°āĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ¸āĻžāĻ°ā§āĻš āĻŸā§āĻ°āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻŦā§‡āĻ¨

āĻ—āĻžāĻ› āĻĻā§‡āĻ–ā§āĻ¨

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

āĻ—āĻžāĻ›āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¤ā§ˆāĻ°āĻŋāĨ¤ āĻ¨ā§‹āĻĄ āĻ—āĻ āĻ¨:

public class Node<T> {
    private T data;
    private int key;
    private Node<T> leftChild;
    private Node<T> rightChild;

    public Node(T data, int key) {
        this.data = data;
        this.key = key;
    }
    public Node<T> getLeftChild() {
        return leftChild;
    }

    public Node<T> getRightChild() {
        return rightChild;
    }
//...ĐžŅŅ‚Đ°ĐģŅŒĐŊŅ‹Đĩ ĐŧĐĩŅ‚ОдŅ‹ ŅƒĐˇĐģĐ°
}

āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡āĻ° āĻĻā§āĻŸāĻŋ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ (āĻāĻŸāĻŋ āĻŦā§‡āĻļ āĻ¸āĻŽā§āĻ­āĻŦ āĻ¯ā§‡ leftChild āĻāĻŦāĻ‚/āĻ…āĻĨāĻŦāĻž rightChild āĻļāĻŋāĻļā§āĻ°āĻž āĻļā§‚āĻ¨ā§āĻ¯ āĻšāĻŦā§‡)āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻŦā§āĻāĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĄā§‡āĻŸāĻž āĻšāĻ˛ āĻ¨ā§‹āĻĄā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻĄā§‡āĻŸāĻž; āĻ•ā§€ - āĻ¨ā§‹āĻĄ āĻ•ā§€āĨ¤

āĻ†āĻŽāĻ°āĻž āĻ—āĻŋāĻāĻŸāĻŸāĻŋ āĻŦā§‡āĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻāĻ–āĻ¨ āĻ—āĻžāĻ›ā§‡āĻ° āĻšāĻžāĻĒā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻž āĻ¯āĻžāĻ•āĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻŦāĻ‚ āĻ¨ā§€āĻšā§‡, "āĻŦā§ƒāĻ•ā§āĻˇ" āĻļāĻŦā§āĻĻā§‡āĻ° āĻ…āĻ°ā§āĻĨ āĻšāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ—āĻžāĻ›ā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻžāĨ¤ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›ā§‡āĻ° āĻ—āĻ āĻ¨:

public class BinaryTree<T> {
     private Node<T> root;

    //ĐŧĐĩŅ‚ОдŅ‹ Đ´ĐĩŅ€Đĩва
}

āĻ•ā§āĻ˛āĻžāĻ¸ āĻĢāĻŋāĻ˛ā§āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ—āĻžāĻ›ā§‡āĻ° āĻŽā§‚āĻ˛ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ•āĻžāĻ°āĻŖ āĻ°ā§āĻŸ āĻĨā§‡āĻ•ā§‡, getLeftChild() āĻāĻŦāĻ‚ getRightChild() āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ—āĻžāĻ›ā§‡āĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻ¨ā§‹āĻĄā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻŸā§āĻ°āĻŋ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ

ПоиŅĐē

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

public Node<T> find(int key) {
    Node<T> current = root;
    while (current.getKey() != key) {
        if (key < current.getKey())
            current = current.getLeftChild();
        else
            current = current.getRightChild();
        if (current == null)
            return null;
    }
    return current;
}

āĻ¯āĻĻāĻŋ āĻ•āĻžāĻ°ā§‡āĻ¨ā§āĻŸ āĻļā§‚āĻ¨ā§āĻ¯ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋ āĻ—āĻžāĻ›ā§‡āĻ° āĻļā§‡āĻˇ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ā§‡ āĻĒā§ŒāĻāĻ›ā§‡āĻ›ā§‡ (āĻāĻ•āĻŸāĻŋ āĻ§āĻžāĻ°āĻŖāĻžāĻ—āĻ¤ āĻ¸ā§āĻ¤āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ—āĻžāĻ›ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ¸ā§āĻ¤āĻŋāĻ¤ā§āĻŦāĻšā§€āĻ¨ āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻ†āĻ›ā§‡āĻ¨ - āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ¤āĻžāĻ° āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨)āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻˇāĻŽ āĻ—āĻžāĻ›ā§‡ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡āĻ° āĻĻāĻ•ā§āĻˇāĻ¤āĻž āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§āĻ¨ (āĻāĻ•āĻŸāĻŋ āĻ—āĻžāĻ› āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋ āĻ•āĻŽ āĻŦāĻž āĻŦā§‡āĻļāĻŋ āĻ¸āĻŽāĻžāĻ¨āĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ)āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§‡āĻ° āĻĻāĻ•ā§āĻˇāĻ¤āĻž āĻšāĻŦā§‡ O(log(n)), āĻāĻŦāĻ‚ āĻŦā§‡āĻ¸ 2 āĻ˛āĻ—āĻžāĻ°āĻŋāĻĻāĻŽāĨ¤ āĻĻā§‡āĻ–ā§āĻ¨: āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°āĻ¸āĻžāĻŽā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻ—āĻžāĻ›ā§‡ n āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ° āĻ…āĻ°ā§āĻĨ āĻšāĻ˛ āĻ—āĻžāĻ›ā§‡āĻ° log(n) āĻŦā§‡āĻ¸ 2 āĻ¸ā§āĻ¤āĻ° āĻĨāĻžāĻ•āĻŦā§‡āĨ¤ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§‡, āĻšāĻ•ā§āĻ°ā§‡āĻ° āĻāĻ• āĻ§āĻžāĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ• āĻ¸ā§āĻ¤āĻ° āĻ¨āĻŋāĻšā§‡ āĻ¯āĻžāĻ¨āĨ¤

āĻĸā§‹āĻ•āĻžāĻ¨

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

   public void insert(T insertData, int key) {
        Node<T> current = root;
        Node<T> parent;
        Node<T> newNode = new Node<>(insertData, key);
        if (root == null)
            root = newNode;
        else {
            while (true) {
                parent = current;
                if (key < current.getKey()) {
                    current = current.getLeftChild();
                    if (current == null) {
                         parent.setLeftChild(newNode);
                         return;
                    }
                }
                else {
                    current = current.getRightChild();
                    if (current == null) {
                        parent.setRightChild(newNode);
                        return;
                    }
                }
            }
        }
    }

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

āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ

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

āĻĒā§āĻ°āĻĨāĻŽ āĻŽāĻžāĻŽāĻ˛āĻžāĨ¤ āĻ¯ā§‡ āĻ¨ā§‹āĻĄāĻŸāĻŋ āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻšāĻŦā§‡ āĻ¤āĻžāĻ° āĻ•ā§‹āĻ¨ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻ¨ā§‡āĻ‡āĨ¤

āĻ¯āĻĻāĻŋ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻ¨ā§‹āĻĄā§‡āĻ° āĻ•ā§‹āĻ¨ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ° āĻŽāĻžāĻ¨ā§‡ āĻšāĻ˛ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ¤āĻžāĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‡āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ° āĻĒāĻŋāĻ¤āĻžāĻŽāĻžāĻ¤āĻžāĻ° leftChild āĻŦāĻž rightChild āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¨āĻžāĻ˛ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻŽāĻžāĻŽāĻ˛āĻžāĨ¤ āĻ¯ā§‡ āĻ¨ā§‹āĻĄāĻŸāĻŋ āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻ†āĻ›ā§‡

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

āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻŽāĻžāĻŽāĻ˛āĻžāĨ¤ āĻ¨ā§‹āĻĄā§‡āĻ° āĻĻā§āĻŸāĻŋ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡

āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻ āĻŋāĻ¨ āĻ•ā§‡āĻ¸āĨ¤ āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ•āĻŸāĻžāĻ•ā§āĻˇāĻĒāĻžāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•.

āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻŸā§āĻ°āĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ¸āĻžāĻ°ā§āĻš āĻŸā§āĻ°āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻŦā§‡āĻ¨

āĻāĻ•āĻœāĻ¨ āĻ‰āĻ¤ā§āĻ¤āĻ°āĻ¸ā§‚āĻ°āĻŋ āĻ–ā§āĻāĻœā§āĻ¨

āĻ§āĻ°āĻž āĻ¯āĻžāĻ• āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§€ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¨ā§‹āĻĄāĻŸāĻŋ āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ 25. āĻ†āĻŽāĻ°āĻž āĻāĻ° āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻ•āĻžāĻ•ā§‡ āĻ°āĻžāĻ–āĻŦ? āĻ¤āĻžāĻ° āĻāĻ•āĻœāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§€ (āĻŦāĻ‚āĻļā§‡āĻ° āĻŦāĻ‚āĻļāĻ§āĻ° āĻŦāĻž āĻŦāĻ‚āĻļāĻ§āĻ°) āĻšāĻ¤ā§‡ āĻšāĻŦā§‡ āĻ‰āĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻ•āĻžāĻ°ā§€(āĻ¯ā§‡ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻ¨ā§‹āĻĄā§‡āĻ° āĻœāĻžāĻ¯āĻŧāĻ—āĻž āĻ¨ā§‡āĻŦā§‡)āĨ¤

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

āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻŸā§āĻ°āĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ¸āĻžāĻ°ā§āĻš āĻŸā§āĻ°āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻŦā§‡āĻ¨

āĻ‰āĻ¤ā§āĻ¤āĻ°āĻ¸ā§‚āĻ°āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ•ā§‹āĻĄ:

    public Node<T> getSuccessor(Node<T> deleteNode) {
        Node<T> parentSuccessor = deleteNode;//Ņ€ĐžĐ´Đ¸Ņ‚ĐĩĐģŅŒ ĐŋŅ€ĐĩĐĩĐŧĐŊиĐēĐ°
        Node<T> successor = deleteNode;//ĐŋŅ€ĐĩĐĩĐŧĐŊиĐē
        Node<T> current = successor.getRightChild();//ĐŋŅ€ĐžŅŅ‚Đž "ĐŋŅ€ĐžĐąĐĩĐŗĐ°ŅŽŅ‰Đ¸Đš" ŅƒĐˇĐĩĐģ
        while (current != null) {
            parentSuccessor = successor;
            successor = current;
            current = current.getLeftChild();
        }
        //ĐŊĐ° вŅ‹Ņ…ОдĐĩ иС Ņ†Đ¸ĐēĐģĐ° иĐŧĐĩĐĩĐŧ ĐŋŅ€ĐĩĐĩĐŧĐŊиĐēĐ° и Ņ€ĐžĐ´Đ¸Ņ‚ĐĩĐģŅ ĐŋŅ€ĐĩĐĩĐŧĐŊиĐēĐ°
        if (successor != deleteNode.getRightChild()) {//ĐĩŅĐģи ĐŋŅ€ĐĩĐĩĐŧĐŊиĐē ĐŊĐĩ ŅĐžĐ˛ĐŋĐ°Đ´Đ°ĐĩŅ‚ Ņ ĐŋŅ€Đ°Đ˛Ņ‹Đŧ ĐŋĐžŅ‚ĐžĐŧĐēĐžĐŧ ŅƒĐ´Đ°ĐģŅĐĩĐŧĐžĐŗĐž ŅƒĐˇĐģĐ°
            parentSuccessor.setLeftChild(successor.getRightChild());//Ņ‚Đž ĐĩĐŗĐž Ņ€ĐžĐ´Đ¸Ņ‚ĐĩĐģŅŒ СайиŅ€Đ°ĐĩŅ‚ ŅĐĩĐąĐĩ ĐŋĐžŅ‚ĐžĐŧĐēĐ° ĐŋŅ€ĐĩĐĩĐŧĐŊиĐēĐ°, Ņ‡Ņ‚ОйŅ‹ ĐŊĐĩ ĐŋĐžŅ‚ĐĩŅ€ŅŅ‚ŅŒ ĐĩĐŗĐž
            successor.setRightChild(deleteNode.getRightChild());//ŅĐ˛ŅĐˇŅ‹Đ˛Đ°ĐĩĐŧ ĐŋŅ€ĐĩĐĩĐŧĐŊиĐēĐ° Ņ ĐŋŅ€Đ°Đ˛Ņ‹Đŧ ĐŋĐžŅ‚ĐžĐŧĐēĐžĐŧ ŅƒĐ´Đ°ĐģŅĐĩĐŧĐžĐŗĐž ŅƒĐˇĐģĐ°
        }
        return successor;
    }

āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•ā§‹āĻĄ:

public boolean delete(int deleteKey) {
        Node<T> current = root;
        Node<T> parent = current;
        boolean isLeftChild = false;//В СавиŅĐ¸ĐŧĐžŅŅ‚и ĐžŅ‚ Ņ‚ĐžĐŗĐž, ŅĐ˛ĐģŅĐĩŅ‚ŅŅ Đģи  ŅƒĐ´Đ°ĐģŅĐĩĐŧŅ‹Đš ŅƒĐˇĐĩĐģ ĐģĐĩвŅ‹Đŧ иĐģи ĐŋŅ€Đ°Đ˛Ņ‹Đŧ ĐŋĐžŅ‚ĐžĐŧĐēĐžĐŧ ŅĐ˛ĐžĐĩĐŗĐž Ņ€ĐžĐ´Đ¸Ņ‚ĐĩĐģŅ, ĐąŅƒĐģĐĩвŅĐēĐ°Ņ ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊĐ°Ņ isLeftChild ĐąŅƒĐ´ĐĩŅ‚ ĐŋŅ€Đ¸ĐŊиĐŧĐ°Ņ‚ŅŒ СĐŊĐ°Ņ‡ĐĩĐŊиĐĩ true иĐģи false ŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚вĐĩĐŊĐŊĐž.
        while (current.getKey() != deleteKey) {
            parent = current;
            if (deleteKey < current.getKey()) {
                current = current.getLeftChild();
                isLeftChild = true;
            } else {
                isLeftChild = false;
                current = current.getRightChild();
            }
            if (current == null)
                return false;
        }

        if (current.getLeftChild() == null && current.getRightChild() == null) {//ĐŋĐĩŅ€Đ˛Ņ‹Đš ŅĐģŅƒŅ‡Đ°Đš
            if (current == root)
                current = null;
            else if (isLeftChild)
                parent.setLeftChild(null);
            else
                parent.setRightChild(null);
        }
        else if (current.getRightChild() == null) {//вŅ‚ĐžŅ€ĐžĐš ŅĐģŅƒŅ‡Đ°Đš
            if (current == root)
                root = current.getLeftChild();
            else if (isLeftChild)
                parent.setLeftChild(current.getLeftChild());
            else
                current.setRightChild(current.getLeftChild());
        } else if (current.getLeftChild() == null) {
            if (current == root)
                root = current.getRightChild();
            else if (isLeftChild)
                parent.setLeftChild(current.getRightChild());
            else
                parent.setRightChild(current.getRightChild());
        } 
        else {//Ņ‚Ņ€ĐĩŅ‚иК ŅĐģŅƒŅ‡Đ°Đš
            Node<T> successor = getSuccessor(current);
            if (current == root)
                root = successor;
            else if (isLeftChild)
                parent.setLeftChild(successor);
            else
                parent.setRightChild(successor);
        }
        return true;
    }

āĻœāĻŸāĻŋāĻ˛āĻ¤āĻž āĻ†āĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ• O(log(n)) āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ—āĻžāĻ›ā§‡ āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš/āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻ–ā§‹āĻāĻœāĻž

āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ¤āĻ‡, āĻ—āĻžāĻ›ā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨/āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻŽāĻžāĻ¨ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ - āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ•ā§āĻ°āĻŽāĻžāĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻ—āĻžāĻ›ā§‡āĻ° āĻŦāĻžāĻŽ/āĻĄāĻžāĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻļā§ƒāĻ™ā§āĻ–āĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ¯āĻĨāĻžāĻ•ā§āĻ°āĻŽā§‡; āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ āĻĒāĻžāĻ¤āĻžāĻ¯āĻŧ āĻĒā§ŒāĻāĻ›āĻžāĻŦā§‡āĻ¨, āĻāĻŸāĻŋ āĻšāĻŦā§‡ āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨/āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĨ¤

    public Node<T> getMinimum(Node<T> startPoint) {
        Node<T> current = startPoint;
        Node<T> parent = current;
        while (current != null) {
            parent = current;
            current = current.getLeftChild();
        }
        return parent;
    }

    public Node<T> getMaximum(Node<T> startPoint) {
        Node<T> current = startPoint;
        Node<T> parent = current;
        while (current != null) {
            parent = current;
            current = current.getRightChild();
        }
        return parent;
    }

āĻœāĻŸāĻŋāĻ˛āĻ¤āĻž - O(log(n))

āĻ¸āĻŋāĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻŦāĻžāĻ‡āĻĒāĻžāĻ¸

āĻŸā§āĻ°āĻžāĻ­āĻžāĻ°ā§āĻ¸āĻžāĻ˛ āĻšāĻ˛ āĻ—āĻžāĻ›ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¨ā§‹āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻŋāĻ›ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨āĨ¤

āĻ°āĻŋāĻ•āĻžāĻ°ā§āĻ¸āĻŋāĻ­ āĻ¸āĻŋāĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻŸā§āĻ°āĻžāĻ­āĻžāĻ°ā§āĻ¸āĻžāĻ˛ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ:

  1. āĻŦāĻžāĻŽ āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻ°ā§āĻŽ āĻ•āĻ°ā§āĻ¨
  2. āĻ¨āĻŋāĻœā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻœ āĻ•āĻ°ā§āĻ¨
  3. āĻ¸āĻ āĻŋāĻ• āĻ¸āĻ¨ā§āĻ¤āĻžāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻāĻ•āĻŸāĻŋ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ āĻ•āĻ°ā§āĻ¨

āĻ•ā§‹āĻĄ:

    public void inOrder(Node<T> current) {
        if (current != null) {
            inOrder(current.getLeftChild());
            System.out.println(current.getData() + " ");//ЗдĐĩŅŅŒ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ вŅĐĩ, Ņ‡Ņ‚Đž ŅƒĐŗОдĐŊĐž
            inOrder(current.getRightChild());
        }
    }

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ…āĻŦāĻļā§‡āĻˇā§‡ ! āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻŋ āĻ•āĻŋāĻ›ā§ āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻ¨āĻž āĻ•āĻ°āĻŋ āĻŦāĻž āĻ•ā§‹āĻ¨ā§‹ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ¨āĻž āĻ•āĻ°āĻŋ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ›āĻŋāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€, āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•ā§‹āĻĄ āĻ†āĻ›ā§‡āĨ¤

Node.java:

public class Node<T> {
    private T data;
    private int key;
    private Node<T> leftChild;
    private Node<T> rightChild;

    public Node(T data, int key) {
        this.data = data;
        this.key = key;
    }

    public void setLeftChild(Node<T> newNode) {
        leftChild = newNode;
    }

    public void setRightChild(Node<T> newNode) {
        rightChild = newNode;
    }

    public Node<T> getLeftChild() {
        return leftChild;
    }

    public Node<T> getRightChild() {
        return rightChild;
    }

    public T getData() {
        return data;
    }

    public int getKey() {
        return key;
    }
}

BinaryTree.java:

public class BinaryTree<T> {
    private Node<T> root;

    public Node<T> find(int key) {
        Node<T> current = root;
        while (current.getKey() != key) {
            if (key < current.getKey())
                current = current.getLeftChild();
            else
                current = current.getRightChild();
            if (current == null)
                return null;
        }
        return current;
    }

    public void insert(T insertData, int key) {
        Node<T> current = root;
        Node<T> parent;
        Node<T> newNode = new Node<>(insertData, key);
        if (root == null)
            root = newNode;
        else {
            while (true) {
                parent = current;
                if (key < current.getKey()) {
                    current = current.getLeftChild();
                    if (current == null) {
                         parent.setLeftChild(newNode);
                         return;
                    }
                }
                else {
                    current = current.getRightChild();
                    if (current == null) {
                        parent.setRightChild(newNode);
                        return;
                    }
                }
            }
        }
    }

    public Node<T> getMinimum(Node<T> startPoint) {
        Node<T> current = startPoint;
        Node<T> parent = current;
        while (current != null) {
            parent = current;
            current = current.getLeftChild();
        }
        return parent;
    }

    public Node<T> getMaximum(Node<T> startPoint) {
        Node<T> current = startPoint;
        Node<T> parent = current;
        while (current != null) {
            parent = current;
            current = current.getRightChild();
        }
        return parent;
    }

    public Node<T> getSuccessor(Node<T> deleteNode) {
        Node<T> parentSuccessor = deleteNode;
        Node<T> successor = deleteNode;
        Node<T> current = successor.getRightChild();
        while (current != null) {
            parentSuccessor = successor;
            successor = current;
            current = current.getLeftChild();
        }

        if (successor != deleteNode.getRightChild()) {
            parentSuccessor.setLeftChild(successor.getRightChild());
            successor.setRightChild(deleteNode.getRightChild());
        }
        return successor;
    }

    public boolean delete(int deleteKey) {
        Node<T> current = root;
        Node<T> parent = current;
        boolean isLeftChild = false;
        while (current.getKey() != deleteKey) {
            parent = current;
            if (deleteKey < current.getKey()) {
                current = current.getLeftChild();
                isLeftChild = true;
            } else {
                isLeftChild = false;
                current = current.getRightChild();
            }
            if (current == null)
                return false;
        }

        if (current.getLeftChild() == null && current.getRightChild() == null) {
            if (current == root)
                current = null;
            else if (isLeftChild)
                parent.setLeftChild(null);
            else
                parent.setRightChild(null);
        }
        else if (current.getRightChild() == null) {
            if (current == root)
                root = current.getLeftChild();
            else if (isLeftChild)
                parent.setLeftChild(current.getLeftChild());
            else
                current.setRightChild(current.getLeftChild());
        } else if (current.getLeftChild() == null) {
            if (current == root)
                root = current.getRightChild();
            else if (isLeftChild)
                parent.setLeftChild(current.getRightChild());
            else
                parent.setRightChild(current.getRightChild());
        } 
        else {
            Node<T> successor = getSuccessor(current);
            if (current == root)
                root = successor;
            else if (isLeftChild)
                parent.setLeftChild(successor);
            else
                parent.setRightChild(successor);
        }
        return true;
    }

    public void inOrder(Node<T> current) {
        if (current != null) {
            inOrder(current.getLeftChild());
            System.out.println(current.getData() + " ");
            inOrder(current.getRightChild());
        }
    }
}

āĻĻā§āĻ°āĻˇā§āĻŸāĻŦā§āĻ¯

O(n) āĻāĻ° āĻ…āĻŦāĻ•ā§āĻˇāĻ¯āĻŧ

āĻ†āĻĒāĻ¨āĻžāĻ°āĻž āĻ…āĻ¨ā§‡āĻ•ā§‡āĻ‡ āĻšāĻ¯āĻŧāĻ¤ā§‹ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨: āĻ—āĻžāĻ›āĻ•ā§‡ āĻ­āĻžāĻ°āĻ¸āĻžāĻŽā§āĻ¯āĻšā§€āĻ¨ āĻ•āĻ°ā§‡ āĻĻāĻŋāĻ˛ā§‡ āĻ•ā§€ āĻšāĻŦā§‡? āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ•ā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨ āĻ•ā§€āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ—āĻžāĻ›ā§‡ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋ āĻ°āĻžāĻ–ā§āĻ¨: 1,2,3,4,5,6... āĻ¤āĻžāĻ°āĻĒāĻ° āĻ—āĻžāĻ›āĻŸāĻŋ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ˛āĻŋāĻ™ā§āĻ•āĻ¯ā§āĻ•ā§āĻ¤ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ° āĻ¸ā§āĻŽāĻ°āĻŖ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻŦā§‡āĨ¤ āĻāĻŦāĻ‚ āĻšā§āĻ¯āĻžāĻ, āĻ—āĻžāĻ›āĻŸāĻŋ āĻ¤āĻžāĻ° āĻ—āĻžāĻ›ā§‡āĻ° āĻ—āĻ āĻ¨ āĻšāĻžāĻ°āĻžāĻŦā§‡, āĻāĻŦāĻ‚ āĻ¤āĻžāĻ‡ āĻĄā§‡āĻŸāĻž āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ā§‡āĻ° āĻĻāĻ•ā§āĻˇāĻ¤āĻžāĨ¤ āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨, āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ, āĻāĻŦāĻ‚ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻŸāĻŋāĻ˛āĻ¤āĻž āĻāĻ•āĻŸāĻŋ āĻ˛āĻŋāĻ™ā§āĻ•āĻ¯ā§āĻ•ā§āĻ¤ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ° āĻŽāĻ¤ā§‹āĻ‡ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡: O(n)āĨ¤ āĻāĻŸāĻŋ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻāĻ•, āĻ†āĻŽāĻžāĻ° āĻŽāĻ¤ā§‡, āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ—āĻžāĻ›ā§‡āĻ° āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĨ¤

āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ°āĻž āĻœāĻ°āĻŋāĻĒā§‡ āĻ…āĻ‚āĻļāĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨āĨ¤ āĻ¸āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ āĻ•āĻ°ā§āĻ¨āĻ•āĻ°ā§āĻ¨āĨ¤

āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻĻāĻŋāĻ¨ āĻ§āĻ°ā§‡ āĻšā§āĻ¯āĻžāĻŦā§āĻ°ā§‡ āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¨āĻž, āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻœāĻžāĻ¨āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‹āĻ¨ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ†āĻ°āĻ“ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻšāĻžāĻ¨?

  • āĻ‰āĻĒāĻžāĻ¤ā§āĻ¤ āĻ•āĻžāĻ āĻžāĻŽā§‹

  • āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ (DP, recursion, data āĻ•āĻŽā§āĻĒā§āĻ°ā§‡āĻļāĻ¨, āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)

  • āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻœā§€āĻŦāĻ¨ā§‡ āĻĄā§‡āĻŸāĻž āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•āĻšāĻžāĻ° āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ—

  • āĻœāĻžāĻ­āĻžāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ°āĻ¯āĻŧā§‡āĻĄ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚

  • āĻœāĻžāĻ­āĻž āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚

2 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ­ā§‹āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ ā§§ āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻŦāĻŋāĻ°āĻ¤ āĻ›āĻŋāĻ˛ā§‡āĻ¨āĨ¤

āĻ¸ā§‚āĻ¤ā§āĻ°: www.habr.com

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