๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐฑ์ค€ ๋ฌธ์ œ ํ’€์ด

[๋ฐฑ์ค€] 1991๋ฒˆ_์•Œ๊ณ ๋ฆฌ์ฆ˜_ํŠธ๋ฆฌ ์ˆœํšŒ

https://www.acmicpc.net/problem/1991

 

1991๋ฒˆ: ํŠธ๋ฆฌ ์ˆœํšŒ

์ฒซ์งธ ์ค„์—๋Š” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 26)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ๋…ธ๋“œ์™€ ๊ทธ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋…ธ๋“œ์˜ ์ด๋ฆ„์€ A๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์•ŒํŒŒ

www.acmicpc.net

๋ฌธ์ œ

์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ „์œ„ ์ˆœํšŒ(preorder traversal), ์ค‘์œ„ ์ˆœํšŒ(inorder traversal), ํ›„์œ„ ์ˆœํšŒ(postorder traversal) ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์™€ ๊ฐ™์€ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด,

์ „์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ : ABDCEFG // (๋ฃจํŠธ) (์™ผ์ชฝ ์ž์‹) (์˜ค๋ฅธ์ชฝ ์ž์‹)

์ค‘์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ : DBAECFG // (์™ผ์ชฝ ์ž์‹) (๋ฃจํŠธ) (์˜ค๋ฅธ์ชฝ ์ž์‹)

ํ›„์œ„ ์ˆœํšŒํ•œ ๊ฒฐ๊ณผ : DBEGFCA // (์™ผ์ชฝ ์ž์‹) (์˜ค๋ฅธ์ชฝ ์ž์‹) (๋ฃจํŠธ)

๊ฐ€ ๋œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N(1≤ N ≤26)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ๋…ธ๋“œ์™€ ๊ทธ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋…ธ๋“œ์˜ ์ด๋ฆ„์€ A๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์˜๋ฌธ์ž ๋Œ€๋ฌธ์ž๋กœ ๋งค๊ฒจ์ง€๋ฉฐ, ํ•ญ์ƒ A๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค. ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š”.์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N(1≤ N ≤26)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N ๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ๋…ธ๋“œ์™€ ๊ทธ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋…ธ๋“œ์˜ ์ด๋ฆ„์€ A๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์˜๋ฌธ์ž ๋Œ€๋ฌธ์ž๋กœ ๋งค๊ฒจ์ง€๋ฉฐ, ํ•ญ์ƒ A๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค. ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š”.์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.


ํŠธ๋ฆฌ

ํŠธ๋ฆฌ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋‚˜๋ฌด๋ฅผ ๊ฑฐ๊พธ๋กœ ์„ธ์›Œ๋†“์€ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ธด ๊ทธ๋ž˜ํ”„๋‹ค.

๋ฏฟ๊ธฐ์ง€ ์•Š๊ฒ ์ง€๋งŒ, ๋‚˜๋ฌด๋ฅผ ๊ฑฐ๊พธ๋กœ ์„ธ์›Œ๋†“์€ ๋“ฏํ•œ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ดค๋‹ค.

โ€‹

- ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด

1. ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

2. ์‚ฌ์ดํด(์ˆœํ™˜)์„ ๊ฐ€์ง€์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

3. ๋ฃจํŠธ๋ผ๋Š” ํŠน๋ณ„ํ•œ ๋…ธ๋“œ๊ฐ€ ํ•œ ๊ฐœ ์กด์žฌํ•ด์•ผ ํ•˜๊ณ , ๋ฃจํŠธ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์–ด๋– ํ•œ ๋…ธ๋“œ๋กœ ๊ฐˆ ๋•Œ, ๊ทธ ๊ฒฝ๋กœ๊ฐ€ ์œ ์ผํ•ด์•ผ ํ•œ๋‹ค.

ํŠธ๋ฆฌ ์šฉ์–ด

๋ฃจํŠธ ๋…ธ๋“œ : ๊ฐ€์žฅ ๋†“์€ ๊ณณ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ(root) ๋…ธ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

์„œ๋ธŒ ํŠธ๋ฆฌ : ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง€๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์—†์–ด์กŒ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด๋ฉด, 2์™€ 3๋ฒˆ์ด ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋˜์–ด ๋˜ ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด ํŠธ๋ฆฌ๋ฅผ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

์ฐจ์ˆ˜ : ์–ด๋–ค ๋…ธ๋“œ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•˜๋Š”๋ฐ, 2๋ฒˆ ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๋Š” 2์ด๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, 4๋ฒˆ ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๋Š” 2์ด๋‹ค.

์ž์‹ ๋…ธ๋“œ : ์–ด๋–ค ๋…ธ๋“œ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋“ค์„ ๋งํ•œ๋‹ค. 2๋ฒˆ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋Š” 4์™€ 5๋ฒˆ ๋…ธ๋“œ์ด๋‹ค.

๋ถ€๋ชจ ๋…ธ๋“œ : ์ž์‹ ๋…ธ๋“œ์˜ ๋ฐ˜๋Œ€๋กœ, 4๋ฒˆ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” 2๋ฒˆ ๋…ธ๋“œ์ด๊ณ , 12๋ฒˆ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” 6๋ฒˆ ๋…ธ๋“œ์ด๋‹ค.

ํ˜•์ œ ๋…ธ๋“œ : ๋™์ผํ•œ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋กœ, 4์™€ 5๋ฒˆ ๋…ธ๋“œ๋Š” ํ˜•์ œ์ด๊ณ , 12์™€ 13๋ฒˆ ๋…ธ๋“œ๋„ ํ˜•์ œ์ด๋‹ค.

์žŽ ๋…ธ๋“œ(๋‹จ๋ง ๋…ธ๋“œ) : ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋กœ, ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ์ด๋‹ค. 8, 9, 10, 11, 12, 13, 14, 15๋ฒˆ ๋…ธ๋“œ๋“ค์ด ์žŽ ๋…ธ๋“œ๋‹ค.

๋น„๋‹จ๋ง ๋…ธ๋“œ : ์žŽ ๋…ธ๋“œ์™€ ๋ฐ˜๋Œ€๋กœ ์ž์‹ ๋…ธ๋“œ๊ฐ€ 1๊ฐœ ์ด์ƒ์ธ ๋…ธ๋“œ๋กœ ์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” ์žŽ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ๋น„๋‹จ๋ง ๋…ธ๋“œ์ด๋‹ค.

์ด์ง„ ํŠธ๋ฆฌ

์ด์ง„ ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ, ๋ฃจํŠธ์™€ ์ตœ๋Œ€ 2๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

์ฆ‰, ์–ด๋–ค ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ 3๊ฐœ์ผ ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ž์‹ ๋…ธ๋“œ๊ฐ€ 0๊ฐœ, 1๊ฐœ, 2๊ฐœ์ธ ๊ฑด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋ฃจํŠธ์™€ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๋ฌผ๋ก  ์ž์‹ ๋…ธ๋“œ๊ฐ€ 0๊ฐœ๋ฉด ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

โ€‹

์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ ๋ฐฉ๋ฒ•์—๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

- ์ „์œ„ ์ˆœํšŒ(preorder)

- ์ค‘์œ„ ์ˆœํšŒ(inorder)

- ํ›„์œ„ ์ˆœํšŒ(postorder)

์ „์œ„ ์ˆœํšŒ

๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ๊ทธ๋‹ค์Œ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ, ๊ทธ๋‹ค์Œ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

์œ„์— ์žˆ๋˜ ๋’ค์ง‘์–ด์ง„ ๋‚˜๋ฌด ๊ทธ๋ฆผ์—์„œ ์ „์œ„ ์ˆœํšŒ๋ฅผ ์ด์šฉํ•˜๋ฉด,

1, 2, 4, 8, 9, 5, 10, 11, 3, 6, 12, 13, 7, 14, 15 ๋ฒˆ ์ˆœ์„œ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

์ค‘์œ„ ์ˆœํšŒ

์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ๊ทธ๋‹ค์Œ ๋ฃจํŠธ ๋…ธ๋“œ, ๊ทธ๋‹ค์Œ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

์œ„์— ์žˆ๋˜ ๋’ค์ง‘์–ด์ง„ ๋‚˜๋ฌด ๊ทธ๋ฆผ์—์„œ ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ์ด์šฉํ•˜๋ฉด,

8, 4, 9, 2, 10, 5, 11, 1, 12, 6, 13, 3, 14, 7, 15 ๋ฒˆ ์ˆœ์„œ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

ํ›„์œ„ ์ˆœํšŒ

์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ๊ทธ๋‹ค์Œ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ, ๊ทธ๋‹ค์Œ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

์œ„์— ์žˆ๋˜ ๋’ค์ง‘์–ด์ง„ ๋‚˜๋ฌด ๊ทธ๋ฆผ์—์„œ ํ›„์œ„ ์ˆœํšŒ๋ฅผ ์ด์šฉํ•˜๋ฉด,

8, 9, 4, 10, 11, 5, 2, 12, 13, 6, 14, 15, 7, 3, 1 ๋ฒˆ ์ˆœ์„œ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.


์ฝ”๋“œ ์„ค๋ช…

1. ๊ตฌ์กฐ์ฒด

โ€‹

typedef struct node* TreeNode;

typedef struct node {

char data;

TreeNode left, right;

}node;

โ€‹

๊ตฌ์กฐ์ฒด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“œ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—๋Š” int, float ๋“ฑ์ด ์žˆ๋‹ค.

์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๋“ค์„ ํ•„์š”์— ๋”ฐ๋ผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‚˜๋Š” node๋ผ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋งŒ๋“ค์—ˆ๋‹ค.

โ€‹

2. ์ „์œ„ ์ˆœํšŒ

โ€‹

void preorder(TreeNode ptr) {

if (ptr != NULL) {

cout << ptr->data;

preorder(ptr->left);

preorder(ptr->right);

}

}

โ€‹

NULL์€ ๋น„์–ด์žˆ์Œ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ,

๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, if ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.

์ „์œ„ ์ˆœํšŒ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ, ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ์ˆœ์„œ๋กœ ๋ฐฉ๋ฌธ์„ ํ•œ๋‹ค.

๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์œ„์—์„œ ๋งŒ๋“  ๊ตฌ์กฐ์ฒด์—์„œ data๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๊ทธ๋‹ค์Œ ๋‹ค์‹œ ์žฌ๊ท€์ ์œผ๋กœ preorder ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋œ๋‹ค.

โ€‹

3. ๊ตฌ์กฐ์ฒด ์„ ์–ธ

โ€‹

node nodes[27];

โ€‹

1๋ฒˆ์—์„œ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋ฟ์ด์ง€ ํ˜ธ์ถœ์€ ํ•˜์ง€ ์•Š์•˜๋‹ค.

์ด ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ผญ ์„ ์–ธ์„ ํ•ด์•ผ ํ•œ๋‹ค.

์„ ์–ธํ•œ ํ›„๋กœ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์žกํžˆ๊ฒŒ ๋œ๋‹ค.

โ€‹

4.

โ€‹

for (int i = 0; i < n; i++) {

cin >> a >> b >> c;

nodes[a - 'A'].data = a;

if (b == '.') nodes[a - 'A'].left = NULL;

else nodes[a - 'A'].left = &nodes[b - 'A'];

if (c == '.') nodes[a - 'A'].right = NULL;

else nodes[a - 'A'].right = &nodes[c - 'A'];

}

โ€‹

์•„๋ž˜ ๋‚ด์šฉ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ๋ฐ›์€ ๊ฐœ์ˆ˜ n ๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค.

'A'๋ถ€ํ„ฐ 'Z'๊นŒ์ง€์˜ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.

์ฒ˜์Œ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ๋ณ€์ˆ˜ a, b, c์— ์ฐจ๋ก€๋กœ ๋‹ด๋Š”๋‹ค.

nodes[a-'A']์—์„œ a-'A'๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

a๋Š” ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

๋งŒ์•ฝ 'A'๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด 'A'-'A'๋ฅผ ํ•ด์„œ 0์ด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด nodes์˜ 0๋ฒˆ index์— ๋ฐฉ๋ฌธํ•œ๋‹ค.

๋งŒ์•ฝ 'B'๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด 'B'-'A'๋ฅผ ํ•ด์„œ 1์ด ๋˜์–ด nodes์˜ 1๋ฒˆ index์— ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋œ๋‹ค.

node ๊ตฌ์กฐ์ฒด์—์„œ

.data๋Š” ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

.left๋Š” ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

.right๋Š” ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ .์„ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ, nodes์˜ ํ•ด๋‹น index์— NULL ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

โ€‹

5. ๋ฐฉ๋ฌธ ์ˆœ์„œ ์ถœ๋ ฅ

โ€‹

preorder(&nodes[0]);

โ€‹

nodes์˜ 0๋ฒˆ index๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ „์œ„ ์ˆœํšŒ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

์ฝ”๋“œ

#include <iostream>
using namespace std;

typedef struct node* TreeNode;
typedef struct node {
    char data;
    TreeNode left, right;
}node;

void preorder(TreeNode ptr) {
    if (ptr != NULL) {
        cout << ptr->data;
        preorder(ptr->left);
        preorder(ptr->right);
    }
}

void inorder(TreeNode ptr) {
    if (ptr != NULL) {
        inorder(ptr->left);
        cout << ptr->data;
        inorder(ptr->right);
    }
}

void postorder(TreeNode ptr) {
    if (ptr != NULL) {
        postorder(ptr->left);
        postorder(ptr->right);
        cout << ptr->data;
    }
}

int main() {
    node nodes[27];
    int n;
    char a, b, c;

    cin >> n;

    for (int i = 0; i < n; i++) {
        cin >> a >> b >> c;
        nodes[a - 'A'].data = a;
        if (b == '.') nodes[a - 'A'].left = NULL;
        else nodes[a - 'A'].left = &nodes[b - 'A'];
        if (c == '.') nodes[a - 'A'].right = NULL;
        else nodes[a - 'A'].right = &nodes[c - 'A'];
    }

    preorder(&nodes[0]);
    cout << endl;
    inorder(&nodes[0]);
    cout << endl;
    postorder(&nodes[0]);
    
    return 0;
}
 

โ€‹

โ€‹