C#/수업 내용

[C#] 이진 트리 post-order(후위 순회)

JSH1 2021. 9. 30. 09:55


후위 순회 post-order Recursive


후위 순회 post-order Stack

        public void PostOrderStack(Node root)
        {
            Stack<Node> stack = new Stack<Node>();
            Node temp = root;
            Node prev = null; // Pop으로 반환한 값을 저장할 변수

            while (temp != null || stack.Count != 0)
            {
                if (temp != null)
                {
                    stack.Push(temp);
                    temp = temp.Left;
                }

                else
                {
                    temp = stack.Peek();

                    if (temp.Right == null || temp.Right == prev) // temp의 오른쪽이 비어있거나 이전에 Pop한 값이랑 같을때
                    {
                        prev = stack.Pop();
                        Console.WriteLine(prev.Data);
                        temp = null;
                    }

                    else // temp의 오른쪽에 값이 있을때
                    {
                        temp = temp.Right;
                    }
                }
            } 
        }