αžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžš αž¬αžšαž”αŸ€αž”αžšαŸ€αž”αž…αŸ†αž˜αŸ‚αž€αž’αžΆαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš

αžŸαŸ’αž˜αžΆαž“αž‘αž»αž€αž˜αž»αž“

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

αž˜αŸ‚αž€αž’αžΆαž„αž‚αžΊαž‡αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αžαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™αž‚αŸ‚αž˜αŸ” αž™αžΎαž„αž’αžΆαž…αž“αž·αž™αžΆαž™αž”αžΆαž“αžαžΆαžŠαžΎαž˜αžˆαžΎαž‚αžΊαž‡αžΆαž€αžšαžŽαžΈαž–αž·αžŸαŸαžŸαž“αŸƒαž€αŸ’αžšαžΆαž αŸ’αžœαŸ” αž“αŸαŸ‡αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŠαžΎαž˜αžˆαžΎαŸ–

αžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžš αž¬αžšαž”αŸ€αž”αžšαŸ€αž”αž…αŸ†αž˜αŸ‚αž€αž’αžΆαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš

αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž˜αŸ‚αž€αž’αžΆαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαž‘αŸ! αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αžšαŸ„αž˜αž€αžΆαžšαž€αžΆαžαŸ‹!

αžŸαŸαž–αŸ’αž‘

ដើម

ឫសដើមឈើ αž‚αžΊαž‡αžΆαžαŸ’αž“αžΆαŸ†αž„αž€αŸ†αž–αžΌαž›αž”αŸ†αž•αž»αžαŸ” αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡αž‚αžΊαž‡αžΆ node A. αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‚αž€αž’αžΆαž„ αž˜αžΆαž“αžαŸ‚αž•αŸ’αž›αžΌαžœαž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž“αžΆαŸ†αž–αžΈ root αž‘αŸ…αž€αžΆαž“αŸ‹ node αž•αŸ’αžŸαŸαž„αž‘αŸ€αž! αžαžΆαž˜αž–αž·αžαžαŸ’αž“αžΆαŸ†αž„αžŽαžΆαž˜αž½αž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αžΆαž«αžŸαž“αŸƒαž’αž“αž»αž˜αŸ‚αž€αž’αžΆαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„αžαŸ’αž“αžΆαŸ†αž„αž“αŸαŸ‡αŸ”

αžͺαž–αž»αž€αž˜αŸ’αžαžΆαž™ / αž€αžΌαž“αž…αŸ…

αžαŸ’αž“αžΆαŸ†αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚ root αž˜αžΆαž“αž‚αŸ‚αž˜αž˜αž½αž™αž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžŠαŸ‚αž›αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αžαŸ’αž“αžΆαŸ†αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αžαŸ’αž“αžΆαŸ†αž„αžαžΆαž„αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ αžͺαž–αž»αž€αž˜αŸ’αžαžΆαž™ αžαŸ’αž“αžΆαŸ†αž„αž“αŸαŸ‡αŸ” αžαŸ’αž“αžΆαŸ†αž„β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž‘αžΈαžαžΆαŸ†αž„β€‹αž“αŸ…β€‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜β€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“β€‹αž“αž·αž„β€‹αž”αžΆαž“β€‹αžαž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž‘αŸ…β€‹αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž αŸ…β€‹ αž€αžΌαž“αž…αŸ… αžαŸ’αž“αžΆαŸ†αž„αž“αŸαŸ‡αŸ” αžŸαžΌαž˜αž›αžΎαž€αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αŸ” αž™αž€αžαŸ’αž“αžΆαŸ†αž„ 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;
    }
//...ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡƒΠ·Π»Π°
}

αžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž€αžΌαž“αž–αžΈαžšαž“αžΆαž€αŸ‹ (αžœαžΆαž–αž·αžαž‡αžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αžŠαŸ‚αž›αž€αžΌαž“αž†αŸ’αžœαŸαž„ αž“αž·αž„/αž¬αžŸαŸ’αžαžΆαŸ† αž€αžΌαž“αž“αžΉαž„αž‘αž»αž€αž‡αžΆαž˜αŸ„αžƒαŸˆ)αŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž™αž›αŸ‹αžαžΆαž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αŸαžαž‚αžΊαž‡αžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαŸ†αž„αŸ” αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž… - αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžαŸ’αž“αžΆαŸ†αž„αŸ”

αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžšαž€β€‹αžƒαžΎαž‰β€‹αž…αŸ†αžŽαž„β€‹αž“αŸαŸ‡ αž₯αž‘αžΌαžœβ€‹αžŸαžΌαž˜β€‹αž“αž·αž™αžΆαž™β€‹αž’αŸ†αž–αžΈβ€‹αž”αž‰αŸ’αž αžΆβ€‹αžŸαž„αŸ’αž€αžαŸ‹β€‹αž’αŸ†αž–αžΈβ€‹αžŠαžΎαž˜αžˆαžΎαŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αž·αž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž–αžΆαž€αŸ’αž™ "ដើមឈើ" αž“αžΉαž„αž˜αžΆαž“αž“αŸαž™αžαžΆ αž‚αŸ†αž“αž·αžαž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαŸ” αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžšαŸ–

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

    //ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Π΅Ρ€Π΅Π²Π°
}

αž€αŸ’αž“αž»αž„αž“αžΆαž˜αž‡αžΆαžœαžΆαž›αžαŸ’αž“αžΆαž€αŸ‹ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαŸ‚ root αž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž–αžΈ root αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš getLeftChild() αž“αž·αž„ getRightChild() αž’αŸ’αž“αž€αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αžαŸ’αž“αžΆαŸ†αž„αžŽαžΆαž˜αž½αž™αž“αŸƒαž˜αŸ‚αž€αž’αžΆαž„αŸ”

αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαžΎαž˜αžˆαžΎ

Поиск

αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αžŠαžΎαž˜αžˆαžΎαžŠαŸ‚αž›αž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αŸ” αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αžΆαžαž»αž‡αžΆαž˜αž½αž™ key key? αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž–αžΈαž«αžŸαž…αž»αŸ‡αž€αŸ’αžšαŸ„αž˜αžŠαžΎαž˜αžˆαžΎ αž αžΎαž™αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αžΌαž“αžŸαŸ„αž‡αžΆαž˜αž½αž™αž€αžΌαž“αžŸαŸ„αžšαž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ– αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΌαž“αžŸαŸ„αžšαžαž·αž…αž‡αžΆαž„αž€αžΌαž“αžŸαŸ„αžšαž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΌαž“αž…αŸ…αžαžΆαž„αž†αŸ’αžœαŸαž„αž“αŸƒαžαŸ’αž“αžΆαŸ†αž„ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αŸ’αžšαžΎαž“αž‘αŸ€αž - αž“αŸ…αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆ - αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰! αž›αŸαžαž€αžΌαžŠαž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αŸ–

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 αžšαž”αžŸαŸ‹αž˜αŸαžšαž”αžŸαŸ‹αžœαžΆαž‘αŸ…αž‡αžΆ nullαŸ”

αž€αžšαžŽαžΈαž‘αžΈαž–αžΈαžšαŸ” αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαž€αž…αŸαž‰αž˜αžΆαž“αž€αžΌαž“αž˜αž½αž™αŸ”

αž€αžšαžŽαžΈαž“αŸαŸ‡αž€αŸαž˜αž·αž“αž–αž·αž”αžΆαž€αžαŸ’αž›αžΆαŸ†αž„αžŠαŸ‚αžšαŸ” αž…αžΌαžšαž™αžΎαž„αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž›αž»αž”αž’αžΆαžαž»αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„αž›αŸαž 14αŸ” αž™αž›αŸ‹αžŸαŸ’αžšαž”αžαžΆ αžŠαŸ„αž™αžŸαžΆαžšαžœαžΆαž‡αžΆαž€αžΌαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžšαž”αžŸαŸ‹αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„ 10 αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΌαž“αž…αŸ…αžšαž”αžŸαŸ‹αžœαžΆ (αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž›αŸαžαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ) αž“αžΉαž„αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„αž’αŸ†αž‡αžΆαž„ 10 αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€ αž’αžΆαž… "αž€αžΆαžαŸ‹" αžœαžΆαž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž–αžΈαž˜αŸ‚αž€αž’αžΆαž„ αž αžΎαž™αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αŸαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αžΌαž“αžšαž”αžŸαŸ‹αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž” αž–αŸ„αž›αž‚αžΊαž§αŸ” αž—αŸ’αž‡αžΆαž”αŸ‹ node αž‡αžΆαž˜αž½αž™ key 10 αž‘αŸ… node 13. αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αžΉαž„αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αžαŸ’αžšαžΌαžœαž›αž»αž” node αžŠαŸ‚αž›αž‡αžΆαž€αžΌαž“αžαžΆαž„αž†αŸ’αžœαŸαž„αžšαž”αžŸαŸ‹ parent αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž‚αž·αžαž’αŸ†αž–αžΈαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€ - αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ”

αž€αžšαžŽαžΈαž‘αžΈαž”αžΈαŸ” Node αž˜αžΆαž“αž€αžΌαž“αž–αžΈαžšαž“αžΆαž€αŸ‹

αž€αžšαžŽαžΈαž–αž·αž”αžΆαž€αž”αŸ†αž•αž»αžαŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαŸ’αž˜αžΈαž˜αž½αž™αŸ”

αžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžš αž¬αžšαž”αŸ€αž”αžšαŸ€αž”αž…αŸ†αž˜αŸ‚αž€αž’αžΆαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžš

αžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αŸ’αž“αž€αžŸαŸ’αž“αž„

αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαžŠαž€αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαŸ„ 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());
        }
    }
}

PS

αž€αžΆαžšαž…αž»αŸ‡αžαŸ’αžŸαŸ„αž™αž‘αŸ…αž‡αžΆ O(n)

αž’αŸ’αž“αž€β€‹αž‡αžΆβ€‹αž…αŸ’αžšαžΎαž“β€‹αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž”αžΆαž“β€‹αž€αžαŸ‹β€‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αŸ– αž…αž»αŸ‡β€‹αž”αžΎβ€‹αž’αŸ’αžœαžΎβ€‹αž˜αŸ‰αŸαž…β€‹αž²αŸ’αž™β€‹αžŠαžΎαž˜β€‹αžˆαžΎβ€‹αž‚αŸ’αž˜αžΆαž“β€‹αž›αŸ†αž“αžΉαž„? αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΆαž€αŸ‹αžαŸ’αž“αžΆαŸ†αž„αž€αŸ’αž“αž»αž„αž˜αŸ‚αž€αž’αžΆαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž€αžΎαž“αž‘αžΎαž„αŸ– 1,2,3,4,5,6... αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αŸ‚αž€αž’αžΆαž„αž“αžΉαž„αž“αžΉαž€αžƒαžΎαž‰αžαŸ’αž›αŸ‡αŸ—αž–αžΈαž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αŸ” αž˜αŸ‚αž“αž αžΎαž™ αž˜αŸ‚αž€αž’αžΆαž„αž“αžΉαž„αž”αžΆαžαŸ‹αž”αž„αŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‚αž€αž’αžΆαž„αžšαž”αžŸαŸ‹αžœαžΆ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸƒαž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€ αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„αž€αžΆαžšαž›αž»αž”αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αŸ– O(n)αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αžαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž“αŸƒαžŠαžΎαž˜αžˆαžΎαž‚αŸ„αž›αž–αžΈαžšαŸ”

αž˜αžΆαž“αžαŸ‚αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αž‘αž„αŸ‹αž˜αžαž·αž“αŸαŸ‡αŸ” αž…αžΌαž›αžŸαžΌαž˜αŸ”

αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž˜αž€β€‹ Habre αž™αžΌαžšβ€‹αž˜αž€β€‹αž αžΎαž™β€‹ αž αžΎαž™β€‹αžαŸ’αž‰αž»αŸ†β€‹αž…αž„αŸ‹β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αžαžΎβ€‹αž’αžαŸ’αžαž”αž‘β€‹αžŽαžΆβ€‹αžαŸ’αž›αŸ‡β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αž“αž€β€‹αž…αž„αŸ‹β€‹αž˜αžΎαž›β€‹αž”αž“αŸ’αžαŸ‚αž˜?

  • αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™

  • αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ (DP, recursion, αž”αž„αŸ’αž αžΆαž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”αž›αŸ”)

  • αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ’αž“αž»αž„αž‡αžΈαžœαž·αžαž–αž·αž

  • αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Android αž“αŸ…αž€αŸ’αž“αž»αž„ Java

  • αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Java Web Application Programming

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 2 αž“αžΆαž€αŸ‹αž”αžΆαž“αž”αŸ„αŸ‡αž†αŸ’αž“αŸ„αžαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 1 αž“αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹αŸ”

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

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