[์ž๋ฃŒ๊ตฌ์กฐ] Tree ๊ตฌ์กฐ(1)

2021. 8. 29. 08:00ใ†์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ค€๋น„/์ž๋ฃŒ๊ตฌ์กฐ

728x90
๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘ ์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ Tree ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ ํ•ด ๋ณด๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๋Œ€ํ•™๊ต ๊ฐ•์˜ ์‹œ๊ฐ„์— ์ฐธ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ”๋˜ ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜์˜€๋Š”๋ฐ, ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ณต๋ถ€ ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ํ™•์ธ ํ•˜๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค๊ป˜์„œ๋Š” ์ฃผ๋‹ˆํ•˜๋ž‘์˜ Git hub์— ๊ด€์‹ฌ์„ ์ฃผ์„ธ์š”!

 

 





 

๐Ÿ“Œ Tree ๊ตฌ์กฐ


 

Tree๋Š” Node์™€ Branch๋ฅผ ์ด์šฉํ•˜์—ฌ Cycle์ด ์ด๋ค„์ง€์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑํ•œ Data ๊ตฌ์กฐ์ธ ๊ฒƒ์ด์—์š”.

Git์„ ์‚ฌ์šฉํ•ด ๋ณด์…จ๋‹ค๋ฉด Branch ๋งŽ์ด ๋“ค์–ด๋ณด์…จ์ง€์š”?

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋””์— ๋งŽ์ด ์‚ฌ์šฉ๋ ๊นŒ์š”? Tree ๊ตฌ์กฐ ์ค‘ Binary Tree(์ด์ง„ ํŠธ๋ฆฌ) ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ, ํƒ์ƒ‰(๊ฒ€์ƒ‰) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„์„ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ต๋‹ˆ๋‹ค!

 

    ๐Ÿ“ ์šฉ์–ด ์ •๋ฆฌ

  • Node : Tree์—์„œ ์‹ค์งˆ์ ์œผ๋กœ Data๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ณณ. ๋˜๋Š” Data๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ (Data์™€ ๋‹ค๋ฅธ Node์— ๋Œ€ํ•œ Branch ์ •๋ณด ํฌํ•จ)
  • Root Node: Tree ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•œ Node
  • Level : Tree ์ตœ์ƒ๋‹จ Node๋ฅผ Level 0์ด๋ผ๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ํ•˜์œ„ Branch๋กœ ์—ฐ๊ฒฐ๋œ Node์˜ Depth(๊นŠ์ด)
  • Parent Node : ์–ด๋–ค Node์˜ ๋‹ค์Œ ํ•˜์œ„ Level์— ์—ฐ๊ฒฐ๋œ Node
  • Child Node : ์–ด๋–ค Node์˜ ์ด์ „ ์ƒ์œ„ Level์— ์—ฐ๊ฒฐ๋œ Node
  • Leaf Node (Terminal Node) : Child Node๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š” Node
  • Sibling (Brother Node) : ๋™์ผํ•œ Parent Node(๋ถ€๋ชจ Node)๋ฅผ ๊ฐ€์ง„ Node๋“ค์„ ์ง€์นญ
  • Depth : Tree์—์„œ Node๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ Level(๊นŠ์ด)

 

 

 

์œ„์˜ ๊ทธ๋ฆผ์—์„œ Node์™€ Node๋ฅผ ์—ฐ๊ฒฐ ํ•ด ์ฃผ๋Š” ์„ ์„ Branch๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๋‹ค๋งŒ, ํ•˜๋‚˜ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ Branch๋Š” ๋ถ€๋ชจ์™€ ์ž์‹ ๊ฐ„์—๋งŒ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๊ณ , Siblings ๊ฐ„์—๋Š” ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๋Š”๋‹ต๋‹ˆ๋‹ค. ๋งŒ์•ฝ Node 5, 3, 6์ด ์„œ๋กœ Branch๋กœ ์—ฐ๊ฒฐ ๋˜์—ˆ๋‹ค๋ฉด Cycle์ด ํ˜•์„ฑ์ด ๋˜์—ˆ์„ํ…๋ฐ, 3๊ณผ 6์€ Siblings๋กœ ์„œ๋กœ Branch๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋‹ค๋ณด๋‹ˆ Cycle์ด ํ˜•์„ฑ๋  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

๐Ÿ“Œ Binary Tree And Binary Search Tree (์ด์ง„ ํŠธ๋ฆฌ์™€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ)


 

์ด์ง„ ํŠธ๋ฆฌ๋Š” Node์˜ ์ตœ๋Œ€ Branch๊ฐ€ 2์ธ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด์—์š”.

Binary Search Tree, BST (์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์ด ๋ถ™๋Š” ๊ฒƒ์„ ์ด์•ผ๊ธฐ ํ•ด์š”!

  • ์™ผ์ชฝ Node๋Š” ์ƒ๋‹จ Node๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ–์œผ๋ฉฐ, ์˜ค๋ฅธ์ชฝ Node๋Š” ์ƒ๋‹จ Node๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

 

์ถœ์ฒ˜ : https://blog.penjee.com/5-gifs-to-understand-binary-search-tree/#binary-search-tree-insertion-node

 

 

 

 

 

    ๐Ÿ“ Binary Tree And Sorted Array Search(์ด์ง„ ํŠธ๋ฆฌ์™€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด๊ฐ„์˜ ํƒ์ƒ‰ ๋น„๊ต)

 

 

์ถœ์ฒ˜ : https://blog.penjee.com/wp-content/uploads/2015/11/binary-search-tree-sorted-array-animation.gif

 

์œ„์— ๊ฐ€์ •์€ 27์ด๋ผ๋Š” Data๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด์—์š”. ๋จผ์ € ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ๋Š” 21๋ณด๋‹ค 27์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ์—์„œ ๊ฐ’์„ ์ฐพ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด? ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ƒ๋‹จ Node์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ์— ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์— ๊ทธ Data๋ฅผ ์œ„์น˜ ์‹œํ‚ค๋Š” ์„ฑ์งˆ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.

์ด๋ฅผ ํ†ตํ•ด 28์— ์ž๋ฆฌ๋กœ ํ•˜๊ฒŒ ๋˜๊ณ , 27์€ 28๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— 25์˜ ์ž๋ฆฌ๋กœ ๊ฐˆ ๊ฒƒ์ด์—์š”. 27์€ 25๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๊ณ , ๋น„๋กœ์†Œ 27์„ ์ฐพ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋กœ 27์ด๋ผ๋Š” Data๋ฅผ ์ฐพ๋Š”๋ฐ, ์ด 3๋ฒˆ์˜ ํƒ์ƒ‰์ด ์ด๋ค„์กŒ์–ด์š”!

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐฐ์—ด์€ ์–ด๋–จ๊นŒ์š”? ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ 27์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์œ„์˜ gif์—์„œ ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ด 10๋ฒˆ์˜ ํƒ์ƒ‰์ด ์ด๋ค„์กŒ์Šต๋‹ˆ๋‹ค.

๋‘˜์„ ๋น„๊ตํ•˜๋ฉด ํƒ์ƒ‰ ์†๋„ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜๊ฒ ์ง€์š”?

 

 

 

 

 

 

๐Ÿ“Œ Binary Search Tree Node Delete (์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๋…ธ๋“œ ์‚ญ์ œ)


 

์ด๊ฒƒ์€ ๋งค์šฐ ๋ณต์žกํ•œ ๊ฒƒ์ด์—์š”. ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด์—์š”!

 

    ๐Ÿ“ Leaf Node : Child Node๊ฐ€ ์—†๋Š” Node๋ฅผ ์‚ญ์ œํ•  ๋•Œ

์ด ๋•Œ๋Š” ์‚ญ์ œํ•  Node์˜ Parent Node(๋ถ€๋ชจ ๋…ธ๋“œ)๊ฐ€ ์‚ญ์ œํ•  Node๋ฅผ Branch๋กœ ๊ฐ€๋ฅดํ‚ค์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

19๋ผ๋Š” Node๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

 

19๋ผ๋Š” Data๊ฐ€ ๋“ค์–ด์žˆ๋Š” Node๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋Š” ๋ณ„ ๋‹ค๋ฅธ ๊ฒƒ ์—†์ด 15๋ผ๋Š” Node๊ฐ€ ํ˜„์žฌ๋Š” 19๋ฅผ Branch๋กœ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ None(Python ๋“ฑ), Null(Java ๋“ฑ)์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ Child Node๊ฐ€ ์—†๋‹ค๊ณ  ์„ค์ •์„ ํ•ด ์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

    ๐Ÿ“ Child Node๊ฐ€ ํ•˜๋‚˜์ธ Node ์‚ญ์ œ

์ด ๋•Œ๋Š” ์‚ญ์ œํ•  Node์˜ Parent Node๊ฐ€ ์‚ญ์ œํ•  Node์˜ Child Node๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

15๋ผ๋Š” Node๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

 

15๋ผ๋Š” Data๊ฐ€ ์žˆ๋Š” Node๋ฅผ ์‚ญ์ œ๋งŒ ํ•˜๊ฒŒ ๋˜๋ฉด 19๋ผ๋Š” Node๋Š” ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 15์— Paren Node์™€ 15์˜ ์›๋ž˜ ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ์—ˆ๋˜ Child Node๋ฅผ Branch๋กœ ์—ฐ๊ฒฐ ํ•ด ์ฃผ๋ฉด ๋˜๊ฒ ์ง€์š”?

 

 

 

    ๐Ÿ“ Child Node๊ฐ€ ๋‘ ๊ฐœ์ธ Node ์‚ญ์ œ

์ด ๋•Œ๋Š” ์ด ๋‘๊ฐ€์ง€๋ฅผ ๊ผญ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

  1. ์‚ญ์ œํ•  Node์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ Node ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’(ํ•ด๋‹น Node์˜ ๊ณ„์† ์™ผ์ชฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ)์„ ์‚ญ์ œํ•  Node์˜ ์ž๋ฆฌ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
    (์ฆ‰, ์‚ญ์ œํ•  Node์˜ Parent Node๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋„๋ก ํ•œ๋‹ค.)
  2. ์‚ญ์ œํ•  Node์˜ ์™ผ์ชฝ ์ž์‹ Node ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’(ํ•ด๋‹น Node์˜ ๊ณ„์† ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ)์„ ์‚ญ์ œํ•  Node์˜ ์ž๋ฆฌ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
    (์ฆ‰, ์‚ญ์ œํ•  Node์˜ Parent Node๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋„๋ก ํ•œ๋‹ค.

 

5๋ผ๋Š” Node๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

 

์œ„์˜ ๊ทธ๋ฆผ์—์„œ 5๋ผ๋Š” Data๊ฐ€ ๋“ค์–ด์žˆ๋Š” Node๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ํ•ด๋‹น ์ž์‹ ์ค‘ ์˜ค๋ฅธ์ชฝ์„ ์„ ํƒํ•ด์„œ ๊ทธ ๊ฐ’์— ์ œ์ผ ์ž‘์€ ๊ฐ’์ด ๋‹ด๊ธด Node๋ฅผ ํ˜„์žฌ 5 ์œ„์น˜์— ๋‘๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”. ์œ„์— ๊ทธ๋ฆผ์€ 6๋ฐ–์— ์—†์œผ๋‹Œ๊นŒ 6์„ ์œ„์น˜์‹œํ‚ค๋ฉด ๋˜๊ฒ ๋„ค์š”!

์ด๋ ‡๊ฒŒ ์‚ญ์ œ๋ฅผ ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๊ทธ ๋‚ด์šฉ์„ ์ ์–ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?

  • ์‚ญ์ œํ•  Node์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ์„ ํƒ
  • ์˜ค๋ฅธ์ชฝ ์ž์‹์˜ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” Node ์„ ํƒ
  • ํ•ด๋‹น Node๋ฅผ ์‚ญ์ œํ•  Node์˜ Parent Node์˜ ์™ผ์ชฝ Branch๊ฐ€ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ํ•œ๋‹ค.
  • ํ•ด๋‹น Node์˜ ์™ผ์ชฝ Branch๊ฐ€ ์‚ญ์ œํ•  Node์˜ ์™ผ์ชฝ Child Node๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ํ•œ๋‹ค.
  • ํ•ด๋‹น Node์˜ ์˜ค๋ฅธ์ชฝ Branch๊ฐ€ ์‚ญ์ œํ•  Node์˜ ์˜ค๋ฅธ์ชฝ Child Node๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ํ•ด๋‹น Node๊ฐ€ ์˜ค๋ฅธ์ชฝ Child Node๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์„ ๊ฒฝ์šฐ, ํ•ด๋‹น Node์˜ ๋ณธ๋ž˜ Parent Node์˜ ์™ผ์ชฝ Branch๊ฐ€ ์˜ค๋ฅธ์ชฝ Child๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ํ•œ๋‹ค.

 

 

 

 

 

๐Ÿ“Œ Binary Search Tree Delete Code


 

์‚ญ์ œํ•  Node๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์—ฐ์‚ฐ์ด ์ฒ˜๋ฆฌ๋˜์•ผ ํ•œ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์‚ญ์ œํ•  Node๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ False๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

 

    def delete(self, value):
        searched = False  # Tree๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ํ•ด๋‹น ๊ฐ’์ด ์žˆ๋Š”์ง€ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ
        self.current_node = self.head  # ์‚ญ์ œํ•  Node๋ฅผ ์ง€์นญ
        self.parent = self.head  # ์‚ญ์ œํ•  Node์˜ ๋ถ€๋ชจ๋ฅผ ์ง€

        while self.current_node:  # ์‚ญ์ œํ•  Node๊ฐ€ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๋ฐ˜๋ณต
            if self.current_node.value == value:  # ์‚ญ์ œํ•  Node์˜ Data๊ฐ€ ์ž…๋ ฅ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด?
                searched = True  # ํ•ด๋‹น ๊ฐ’์ด ์žˆ๊ธฐ์— True๋กœ ๋ณ€๊ฒฝ
                break  # while ๋ฌธ์„ ๋๋‚ธ๋‹ค.

            elif value < self.current_node.value:  # ์ฐพ์„ ๊ฐ’์ด ๋น„๊ต ๋Œ€์ƒ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด?
                self.parent = self.current_node
                self.current_node = self.current_node.left

            else:
                self.parent = self.current_node
                self.current_node = self.current_node.right

        if searched == False:
            return False

        # == ์ดํ›„๋ถ€ํ„ฐ ์‚ญ์ œ Case์— ๋งž์ถ”์–ด Code ์ž‘์„ฑ == #

 

    ๐Ÿ“ Case 1 : ์‚ญ์ œํ•  Node๊ฐ€ Leaf Node์ธ ๊ฒฝ์šฐ

 

 

       # Leaf Node์ธ ๊ฒฝ์šฐ ์‚ญ์ œ Case
        # self.current_node๊ฐ€ ์‚ญ์ œํ•  Node์ด๊ณ , self.parent Node๋Š” ์‚ญ์ œํ•  Node์˜ Parent Node
        if self.current_node.left == None and self.current_node.right == None:
            if value < self.parent.value:
                self.parent.left = None

            else:
                self.current_node.right = Node
                del self.current_node

 

 

 

  ๐Ÿ“ Case 2 : ์‚ญ์ œํ•  Node๊ฐ€ Child Node๋ฅผ ํ•œ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒฝ์šฐ

 

 

 

 

            # ์‚ญ์ œํ•  Node๊ฐ€ Parent ๊ธฐ์ค€ ์™ผ์ชฝ์— ์žˆ์„ ๋•Œ
            if self.current_node.left != None and self.current_node.right == None:	# ์‚ญ์ œํ•  Node์˜ ์™ผ์ชฝ ์ž์‹ Node๊ฐ€ None์ด ์•„๋‹ˆ๊ณ , ์˜ค๋ฅธ์ชฝ ์ž์‹ Node๋Š” None ์ด๋ผ๋ฉด?
                if value < self.parent.value:	# ์‚ญ์ œํ•  ๊ฐ’์ด ๋ถ€๋ชจ Node์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด?
                    self.parent.left = self.current_node.left	# ๋ถ€๋ชจ Node์˜ ์™ผ์ชฝ ์ž์‹ Node์— ์‚ญ์ œํ•  Node์˜ ์™ผ์ชฝ ์ž์‹ Node๋ฅผ ๋„ฃ์Œ์œผ๋กœ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ํ•œ๋‹ค.

                else:							# ์‚ญ์ œํ•  ๊ฐ’์ด ๋ถ€๋ชจ Node์˜ ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด?
                    self.parent.right = self.current_node.left	# ๋ถ€๋ชจ Node์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ Node์— ์‚ญ์ œํ•  Node์˜ ์™ผ์ชฝ ์ž์‹ Node๋ฅผ ๋„ฃ์Œ์œผ๋กœ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ํ•œ๋‹ค.
                    
                    
           # ์‚ญ์ œํ•  Node๊ฐ€ Parent ๊ธฐ์ค€ ์˜ค๋ฅธ์ชฝ์— ์žˆ์„ ๋•Œ
            elif self.current_node.left == None and self.current_node.right != None:
                if value < self.parent.value:
                    self.parent.left = self.current_node.right

                else:
                    self.parent.right = self.current_node.right

 

 


 

 

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”? ๊ตฌ๋…๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋Œ“๊ธ€์€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ ๋งŽ์€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค

 

728x90
๋ฐ˜์‘ํ˜•