Unity/자료구조

[3.30] 트리 연습 1

ljw4104 2021. 3. 30. 17:53
namespace Study01
{
    public class Node
    {
        public string data;
        public Node left;
        public Node right;

        public Node(string data)
        {
            this.data = data;
        }
    }
}
using System;
using System.Collections.Generic;

namespace Study01
{
    public class Tree
    {
        private Node root;

        public Tree(string data)
        {
            this.root = new Node(data);
        }

        public Node AddChild(Node parent, string data)
        {
            if (parent == null) return null;

            if (parent.left == null)
            {
                parent.left = new Node(data);
                return parent.left;
            }
            else
            {
                var discover = parent.left;
                while (discover.right != null)
                {
                    discover = discover.right;
                }
                discover.right = new Node(data);
                return discover.right;
            }
        }

        public Node AddSilbling(Node node, string data)
        {
            if (node == null) return null;

            if (node.right == null)
            {
                node.right = new Node(data);
                return node.right;
            }
            else
            {
                while (node.right != null)
                {
                    node = node.right;
                }
                node.right = new Node(data);
                return node.right;
            }
        }

        public void PrintBFS()
        {
            Queue<Node> queue = new Queue<Node>();
            queue.Enqueue(this.root);

            while (queue.Count > 0)
            {
                var item = queue.Dequeue();
                while(item != null)
                {
                    Console.Write("{0} ", item.data);

                    if (item.left != null)
                        queue.Enqueue(item.left);

                    item = item.right;
                }
                Console.WriteLine();
            }
        }

        public void PrintDFS(Node node)
        {
            if (node != null) 
                Console.WriteLine(node.data);

            if(node != null)
            {
                PrintDFS(node.left);
            }
            if (node != null)
            {
                PrintDFS(node.right);
            } 
        }

        public Node GetRoot()
        {
            return this.root;
        }
    }
}
using System;

namespace Study01
{
    public class App
    {
        public App()
        {
            Tree tree = new Tree("서울");
            Node root = tree.GetRoot();

            Node inc = tree.AddChild(root, "인천");
            Node snam = tree.AddSilbling(inc, "성남");

            tree.AddChild(inc, "안산");
            Node pan = tree.AddChild(snam, "판교");
            tree.AddSilbling(pan, "수원");

            Console.WriteLine("BFS SEARCH RESULT");
            tree.PrintBFS();
            Console.WriteLine();

            Console.WriteLine("DFS SEARCH RESULT");
            tree.PrintDFS(root);
            Console.WriteLine();
        }
    }
}