0401 연결리스트로 구현한 이진트리 InorderTraversal (Iterative) 복습

2021. 4. 1. 11:26C#/자료구조

루트 노드에서 최좌측 노드까지 스택에 저장한다.

public class BinaryTree
    {
        public BinaryTreeNode root;
        public BinaryTree(string data) 
        {
            this.root = new BinaryTreeNode(data);
        }
        
        public void PrintInorderTraversal() 
        {
            //스택을 만든다.
            var stack = new Stack<BinaryTreeNode>();
            //변수에 루트 넣기
            var node = this.root;
            //루트 노드에서 최좌측까지 스택에 저장
            while (node != null) 
            {
                stack.Push(node);
                node = node.left;
            }
            //스택에 요소가 있다면 반복
            while (stack.Count > 0) 
            {
                //꺼내고 출력
                var popNode = stack.Pop();
                Console.WriteLine(popNode.data);
                if (popNode.right != null) 
                {
                    //오른쪽 노드가 있는지 확인해서 있으면
                    //오른쪽 노드의 서브트리의 최좌측까지 스택에 저장
                    var temp = popNode.right;
                    while (temp != null) 
                    {
                        stack.Push(temp);
                        temp = temp.left;
                    }
                }
            }
        }
    }
public class App
    {
        public App()
        {
            BinaryTree tree = new BinaryTree("A");
            tree.root.left = new BinaryTreeNode("B");
            tree.root.right = new BinaryTreeNode("C");
            tree.root.left.left = new BinaryTreeNode("D");
            tree.root.left.right = new BinaryTreeNode("E");
            tree.root.right.left = new BinaryTreeNode("F");

            tree.PrintInorderTraversal();
        }
    }