본문 바로가기

자료구조

이진트리 LevelOrder + AddChild

        public void LevelOrder()
        {
            Console.WriteLine("이진트리 레벨오더");
            Queue q = new Queue();

            if (this.Root == null)
            {
                Console.WriteLine("노드가 없습니다.");
            }
            else
            {
                q.Enqueue(this.Root);
                Node temp;
                
                while (q.Count() > 0)
                {
                    temp = q.Dequeue();
                    Console.Write("{0} ", temp.Data);
                    if (temp.Left != null)
                    {
                        q.Enqueue(temp.Left);
                    }
                    if (temp.Right != null)
                    {
                        q.Enqueue(temp.Right);
                    }
                }
            }
        }

더보기
        public Node AddChild(Node node, string data, int dir)
        {
            Node child = new Node(data);

            if (this.Root == null)
            {
                this.Root = child;
                return this.Root;
            }
            else
            {
                if (node == this.Root)
                {
                    Node temp = this.Root;
                    if (temp.Left != null && temp.Right != null)
                    {
                        Console.WriteLine("뿌리에 더이상 자식을 추가할수 없습니다.");
                        return null;
                    }
                    else if (dir == 1)
                    {
                        if (temp.Left == null)
                        {
                            temp.Left = child;
                            return temp.Left;
                        }
                        else
                        {
                            Console.WriteLine("뿌리의 왼쪽자식이 이미 있습니다.");
                            return temp.Left;
                        }
                    }
                    else
                    {
                        if (temp.Right == null)
                        {
                            temp.Right = child;
                            return temp.Right;
                        }
                        else
                        {
                            Console.WriteLine("뿌리의 오른쪽자식이 이미 있습니다.");
                            return temp.Right;
                        }
                    }
                }
                else
                {
                    if (node.Left != null && node.Right != null)
                    {
                        Console.WriteLine("{0}에 더이상 자식을 추가할수 없습니다.", node);
                        return null;
                    }
                    else if (dir == 1)
                    {
                        if (node.Left == null)
                        {
                            node.Left = child;
                            return node.Left;
                        }
                        else
                        {
                            Console.WriteLine("{0}의 왼쪽자식이 이미 있습니다.", node);
                            return node.Left;
                        }
                    }
                    else
                    {
                        if (node.Right == null)
                        {
                            node.Right = child;
                            return node.Right;
                        }
                        else
                        {
                            Console.WriteLine("{0}의 오른쪽자식이 이미 있습니다.", node);
                            return node.Right;
                        }
                    }
                }
            }
        }

 

 

'자료구조' 카테고리의 다른 글

이진트리 PreOrder with Stack  (0) 2021.12.28
이진트리 PreOrder 재귀구현  (0) 2021.12.28
LCRS트리 PreOrder with Stack  (0) 2021.12.28
LCRS트리 PreOrder 재귀구현  (0) 2021.12.28
사향트리 PreOrder  (0) 2021.12.28