0401 연결리스트로 이진트리 만들고 중위순회 하기 (Iterative방식) 복습

2021. 4. 1. 12:10C#/자료구조

public class BinaryTree
    {
        public BinaryTreeNode root;
        public BinaryTree(string data) 
        {
            this.root = new BinaryTreeNode(data);
        }
        
        
        public void PrintInorderIterative2() 
        {
            //스택 만든다.
            var stack = new Stack<BinaryTreeNode>();
            //변수에 루트를 넣는다.
            var node = this.root;
            //변수에 노드가 있거나 스택에 요소가 있을 경우 반복
            while (node != null || stack.Count > 0) 
            {
                //변수에 노드가 있다면, 반복
                while (node != null) 
                {
                    //변수의 노드를 스택에 넣는다
                    stack.Push(node);
                    //변수에 노드의 왼쪽 노드를 넣는다.
                    node = node.left;
                }
                //스택에서 꺼냄
                node=stack.Pop();
                //출력
                Console.WriteLine("{0}",node.data);
                //변수의 오른쪽 노드를 넣는다.(오른쪽에 있는 서브트리 최좌측까지 넣기)
                node =node.right;
            }
        }
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.PrintInorderIterative2();
        }
    }