แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒฎแƒ” แƒแƒœ แƒ แƒแƒ’แƒแƒ  แƒ›แƒแƒ•แƒแƒ›แƒ–แƒแƒ“แƒแƒ— แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒฎแƒ”

แƒžแƒ แƒ”แƒšแƒฃแƒ“แƒ˜แƒ

แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ”แƒฎแƒ”แƒ‘แƒ แƒ‘แƒ˜แƒœแƒแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒฎแƒ”แƒ”แƒ‘แƒก. แƒ›แƒ” แƒชแƒแƒขแƒ แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ แƒฐแƒแƒคแƒ›แƒแƒœแƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ˜แƒฅ แƒ‘แƒ˜แƒœแƒแƒ แƒฃแƒš แƒฎแƒ”แƒ”แƒ‘แƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒแƒ  แƒ›แƒ˜แƒ›แƒ˜แƒฅแƒชแƒ”แƒ•แƒ˜แƒ แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก, แƒฉแƒแƒกแƒ›แƒ˜แƒก, แƒฌแƒแƒจแƒšแƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜ แƒแƒ  แƒ˜แƒงแƒ แƒแƒฅแƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜. แƒแƒฎแƒšแƒ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ“แƒแƒ›แƒ”แƒฌแƒ”แƒ แƒ แƒกแƒขแƒแƒขแƒ˜แƒ แƒฎแƒ”แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒแƒšแƒ‘แƒแƒ— แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ—.

แƒฎแƒ” แƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ™แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ. แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒ แƒแƒ› แƒฎแƒ” แƒแƒ แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒฎแƒ”:

แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒฎแƒ” แƒแƒœ แƒ แƒแƒ’แƒแƒ  แƒ›แƒแƒ•แƒแƒ›แƒ–แƒแƒ“แƒแƒ— แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒฎแƒ”

แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒฎแƒ”! แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒญแƒ แƒ˜แƒก แƒฅแƒ•แƒ”แƒจแƒแƒ!

แƒขแƒ”แƒ แƒ›แƒ˜แƒœแƒแƒšแƒแƒ’แƒ˜แƒ

root

แƒฎแƒ˜แƒก แƒคแƒ”แƒกแƒ•แƒ˜ แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒ”แƒก แƒแƒ แƒ˜แƒก A แƒ™แƒ•แƒแƒœแƒซแƒ˜. แƒฎแƒ”แƒจแƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ— แƒ’แƒ–แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒคแƒ”แƒกแƒ•แƒ˜แƒ“แƒแƒœ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒกแƒฎแƒ•แƒ แƒ™แƒ•แƒแƒœแƒซแƒแƒ›แƒ“แƒ” แƒ›แƒ˜แƒ˜แƒงแƒ•แƒแƒœแƒแƒก! แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฉแƒแƒ˜แƒ—แƒ•แƒแƒšแƒแƒก แƒแƒ› แƒ™แƒ•แƒแƒœแƒซแƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒฅแƒ•แƒ”แƒฎแƒ˜แƒก แƒคแƒ”แƒกแƒ•แƒแƒ“.

แƒ›แƒจแƒแƒ‘แƒšแƒ”แƒ‘แƒ˜/แƒจแƒ—แƒแƒ›แƒแƒ›แƒแƒ•แƒšแƒ”แƒ‘แƒ˜

แƒคแƒ”แƒกแƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒ•แƒแƒœแƒซแƒก แƒแƒฅแƒ•แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ™แƒ˜แƒ“แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒ“แƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ” แƒ™แƒ•แƒแƒœแƒซแƒแƒ›แƒ“แƒ”. แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒ•แƒแƒœแƒซแƒ˜แƒก แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ” แƒ™แƒ•แƒแƒœแƒซแƒก แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒจแƒแƒ‘แƒ”แƒšแƒ˜ แƒ”แƒก แƒ™แƒ•แƒแƒœแƒซแƒ˜. แƒ™แƒ•แƒแƒœแƒซแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ“แƒ แƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒก, แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒจแƒ—แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ”แƒก แƒ™แƒ•แƒแƒœแƒซแƒ˜. แƒแƒ•แƒ˜แƒฆแƒแƒ— แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜. แƒแƒ˜แƒฆแƒ”แƒ— แƒ™แƒ•แƒแƒœแƒซแƒ˜ 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 แƒ‘แƒแƒ•แƒจแƒ•แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒแƒก null). แƒแƒšแƒ‘แƒแƒ— แƒ›แƒ˜แƒฎแƒ•แƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒ—แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒ™แƒ•แƒแƒœแƒซแƒจแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜; แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ - แƒ™แƒ•แƒแƒœแƒซแƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒแƒ แƒ™แƒ•แƒ˜แƒ”แƒ— แƒ™แƒ•แƒแƒœแƒซแƒ˜, แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒแƒ— แƒฎแƒ”แƒ”แƒ‘แƒ˜แƒก แƒแƒฅแƒขแƒฃแƒแƒšแƒฃแƒ  แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ–แƒ”. แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒจแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ โ€žแƒฎแƒ”โ€œ แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒฎแƒ˜แƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒแƒก. แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒฎแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ:

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 แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ แƒ“แƒแƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ‘แƒฃแƒš แƒฎแƒ”แƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒฎแƒ˜แƒก แƒšแƒแƒ’แƒ˜(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;
                    }
                }
            }
        }
    }

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ’แƒแƒ แƒ“แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒ•แƒแƒœแƒซแƒ˜แƒกแƒ, แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒ•แƒแƒœแƒซแƒ˜แƒก แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒ”แƒœแƒ˜ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ null, แƒ›แƒจแƒแƒ‘แƒ”แƒšแƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒคแƒฃแƒ แƒชแƒ”แƒšแƒก.
แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ‘แƒ แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒช แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก - O(log(n)).

แƒ›แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ

แƒฌแƒแƒจแƒšแƒ แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ แƒ—แƒฃแƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒฎแƒ”แƒ–แƒ”. แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜แƒ, แƒ แƒแƒ› แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒžแƒแƒ•แƒœแƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒแƒก แƒ•แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ—. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ”แƒ แƒ” แƒ แƒ? แƒ—แƒฃ แƒฉแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒแƒก null-แƒ–แƒ”, แƒ›แƒแƒจแƒ˜แƒœ แƒ“แƒแƒ•แƒ™แƒแƒ แƒ’แƒแƒ•แƒ— แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒ˜แƒ› แƒฅแƒ•แƒ”แƒฎแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒคแƒ”แƒกแƒ•แƒ˜ แƒแƒ แƒ˜แƒก แƒ”แƒก แƒ™แƒ•แƒแƒœแƒซแƒ˜. แƒฎแƒ˜แƒก แƒ›แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒแƒคแƒ แƒกแƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ. แƒแƒ›แƒแƒกแƒแƒฆแƒ”แƒ‘ แƒ™แƒ•แƒแƒœแƒซแƒก แƒจแƒ•แƒ˜แƒšแƒ˜ แƒแƒ  แƒฐแƒงแƒแƒ•แƒก.

แƒ—แƒฃ แƒฌแƒแƒกแƒแƒจแƒšแƒ”แƒšแƒ˜ แƒ™แƒ•แƒแƒœแƒซแƒก แƒจแƒ•แƒ˜แƒšแƒ˜ แƒแƒ  แƒฐแƒงแƒแƒ•แƒก, แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒ˜แƒก แƒคแƒแƒ—แƒแƒšแƒ˜แƒ. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒจแƒแƒ‘แƒšแƒ˜แƒก แƒ›แƒแƒ แƒชแƒฎแƒ”แƒœแƒ แƒแƒœ แƒ›แƒแƒ แƒฏแƒ•แƒ”แƒœแƒ Child แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜ null.

แƒ›แƒ”แƒแƒ แƒ” แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ. แƒแƒ›แƒแƒกแƒแƒฆแƒ”แƒ‘ แƒ™แƒ•แƒแƒœแƒซแƒก แƒฐแƒงแƒแƒ•แƒก แƒ”แƒ แƒ—แƒ˜ แƒจแƒ•แƒ˜แƒšแƒ˜

แƒ”แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒแƒกแƒ”แƒ•แƒ” แƒแƒ  แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ แƒ—แƒฃแƒšแƒ˜. แƒ“แƒแƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ— แƒฉแƒ•แƒ”แƒœแƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก. แƒ“แƒแƒ•แƒฃแƒจแƒ•แƒแƒ—, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒฌแƒแƒ•แƒจแƒแƒšแƒแƒ— แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ 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());
        }
    }
}

PS

แƒ’แƒแƒ“แƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒ O(n)-แƒ›แƒ“แƒ”

แƒ‘แƒ”แƒ•แƒ แƒ›แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ’แƒแƒœแƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒแƒ›แƒฉแƒœแƒ˜แƒ: แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒฎแƒ”แƒก แƒ’แƒแƒฃแƒฌแƒแƒœแƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ˜แƒ—? แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฉแƒแƒ“แƒ”แƒ— แƒ™แƒ•แƒแƒœแƒซแƒ”แƒ‘แƒ˜ แƒฎแƒ”แƒจแƒ˜ แƒ›แƒ–แƒแƒ แƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ—: 1,2,3,4,5,6... แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฎแƒ” แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒฌแƒ˜แƒšแƒแƒ“ แƒ›แƒแƒ’แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ— แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒกแƒ˜แƒแƒก. แƒ“แƒ˜แƒแƒฎ, แƒฎแƒ” แƒ“แƒแƒ™แƒแƒ แƒ’แƒแƒ•แƒก แƒ—แƒแƒ•แƒ˜แƒก แƒฎแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก แƒ“แƒ, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ‘แƒแƒก. แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก, แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒ“แƒ แƒฌแƒแƒจแƒšแƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ” แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ˜แƒก: O(n). แƒ”แƒก แƒแƒ แƒ˜แƒก แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒฎแƒ”แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜, แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—, แƒ›แƒ˜แƒœแƒฃแƒกแƒ˜.

แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒจแƒ˜ แƒ›แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒแƒ‘แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก. แฒจแƒ”แƒ‘แƒ แƒซแƒแƒœแƒ“แƒ˜แƒ—แƒ’แƒ—แƒฎแƒแƒ•แƒ—

แƒ›แƒ” แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒแƒœแƒ˜แƒ แƒแƒ  แƒ•แƒงแƒแƒคแƒ˜แƒšแƒ•แƒแƒ  Habrรฉ-แƒ–แƒ” แƒ“แƒ แƒ›แƒ˜แƒœแƒ“แƒ แƒ•แƒ˜แƒชแƒแƒ“แƒ”, แƒ แƒ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒฎแƒ•แƒ แƒ’แƒกแƒฃแƒ แƒ— แƒ›แƒ”แƒขแƒ˜?

  • แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜

  • แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ”แƒ‘แƒ˜ (DP, แƒ แƒ”แƒ™แƒฃแƒ แƒกแƒ˜แƒ, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ แƒ“แƒ แƒ.แƒจ.)

  • แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ แƒ”แƒแƒšแƒฃแƒ  แƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒแƒจแƒ˜

  • แƒแƒœแƒ“แƒ แƒแƒ˜แƒ“แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ แƒฏแƒแƒ•แƒแƒจแƒ˜

  • Java แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ

แƒฎแƒ›แƒ แƒ›แƒ˜แƒกแƒชแƒ 2 แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ›แƒ. 1 แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ›แƒ แƒ—แƒแƒ•แƒ˜ แƒจแƒ”แƒ˜แƒ™แƒแƒ•แƒ.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ