티스토리 뷰

문제

이진 트리가 주어지면 루트 노드부터 레벨별로 프린트 하시오. 프린트 방식은 홀수 레벨은 왼쪽에서 오른쪽으로, 짝수 레벨은 오른쪽에서 왼쪽으로 프린트 하시오. 루트노드는 레벨 1입니다. 예제를 보시오.

 

<예제>

1

/ \

2 3

/ \ / \

4 5 6 7

 

프린트: 1, 3, 2, 4, 5, 6, 7.

https://mailprogramming.com/

 

 

너무너무 이해가 되지 않는 오늘의 문제!

 

======

 

이해가 되지 않던 이유

 

1) 예제에서 왼쪽 이미지를 뜻하는 걸 오른쪽 이미지로 보고 이게 뭐인가 했다.

 

2) 노드레벨을 루트노드 레벨1(홀), 노드1 레벨2(짝), 노드2 레벨3(홀)로 봐야 하는데 맨 앞에 써있는 숫자를 노드레벨로 착각하여 홀짝짝으로 계산 한 나의 실수.

 

======

 

결론 : 나의 풀이

 

C#의 윈폼을 활용했다.

 

 

textBox1에 이진 트리가 주어진다.

프린트 버튼을 클릭하면 결과가 나온다.

 

나의 코드

private void button1_Click(object sender, EventArgs e)

{

    int a = 1; // 라인 수

 

     // textBox1을 라인별로 쪼개서 담기

    string[] sarray = textBox1.Text.Split(new string[] { "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

    

    // textBox1 라인 수 만큼

    for(int i=0;i<textBox1.Lines.Length;i+=2)

    {

        // textBox1의 i라인의 문자열 쪼개기

        string[] s = sarray[i].Split(' ');

        if (a%2 ==0) // 짝수 

        {

            // 오른쪽에서 왼쪽으로, 마지막에서 첫번째 순

            for(int x=s.Length-1; x>=0 ;x--)

            {

                if (label1.Text.Length > 0)

                {

                    label1.Text += ",";

                }

 

                label1.Text += s[x].ToString();

            }

        }

        else // 홀수

        {

            // 왼쪽에서 오른쪽으로, 첫번째에서 마지막 순

            for (int x = 0; x <s.Length; x++)

            {

                if (label1.Text.Length > 0)

                {

                    label1.Text += ",";

                }

 

                label1.Text += s[x].ToString();

            }

        }

                

        a++;

    }

}

 

댓글
댓글쓰기 폼