ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 03/31 BinaryTree 배열로 구현하기
    자료구조/수업내용 2021. 3. 31. 15:57

     

    배열로 이진트리
    레벨 순으로 왼쪽에서 오른쪽으로 저장
    A[0]는 루트노드

    왼쪽추가(부모인덱스, 데이터)
    왼쪽노드 계산 : (부모인덱스 * 2) + 1
    계산한 인덱스에 데이터 추가

    오른쪽추가(부모인덱스, 데이터)
    오른쪽노드 계산 : (부모인덱스 * 2) + 1
    계산한 인덱스에 데이터 추가

     

    Program.cs

    using System;
    
    namespace Study09
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Main");
                new App();
            }
        }
    }
    

     

    App.cs

    using System;
    
    namespace Study09
    {
    
        public class App
        {
    
            //생성자 
            public App()
            {
                Console.WriteLine("App");
                BinaryTreeArray tree = new BinaryTreeArray(7);
                tree.Root = "A";
                tree.SetLeft(0, "B");
                tree.SetRight(0, "C");
                tree.SetLeft(1, "D");
                tree.SetLeft(2, "F");
                tree.Print();
                var prent = tree.GetParent(5);
                Console.WriteLine("5번째 인덱스의 부모요소 : " + prent);
            }
    
        }
    }
    

     

    BinaryTreeArray.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study09
    {
        public class BinaryTreeArray
        {
            private string[] arr;
            public string Root
            {
                get
                {
                    return this.arr[0];
                }
                set
                {
                    this.arr[0] = value;
                }
            }
            //생성자 
            public BinaryTreeArray(int capacity)
            {
                //배열 생성 
                this.arr = new string[capacity];
            }
    
            //왼쪽추가 
            public void SetLeft(int parentIndex, string data)
            {
    
                int leftIndex = (parentIndex * 2) + 1;
    
                //부모가 없거나 배열이 full인경우 
                if (this.arr[parentIndex] == null || leftIndex >= this.arr.Length)
                {
                    throw new ApplicationException("Error!");
                }
    
                this.arr[leftIndex] = data;
            }
    
            //왼쪽 요소 가져오기 
            public string GetLeft(int parentIndex)
            {
                int leftIndex = (parentIndex * 2) + 1;
    
                return this.arr[leftIndex];
            }
    
            //오른쪽 추가 
            public void SetRight(int parentIndex, string data)
            {
                int rightIndex = (parentIndex * 2) + 2;
    
                //부모가 없거나 배열이 full인경우 
                if (this.arr[parentIndex] == null || rightIndex >= this.arr.Length)
                {
                    throw new ApplicationException("Error!");
                }
    
                this.arr[rightIndex] = data;
            }
    
            //오른쪽 가져오기 
            public string GetRight(int parentIndex)
            {
                int rightIndex = (parentIndex * 2) + 2;
                return this.arr[rightIndex];
            }
    
            //부모 요소 가져오기 
            public string GetParent(int childIndex)
            {
    
                if (childIndex == 0) return null;
    
                int parentIndex = (childIndex - 1) / 2;
                return this.arr[parentIndex];
            }
    
            //출력 
            public void Print()
            {
                for (int i = 0; i < this.arr.Length; i++)
                {
                    Console.Write("{0}", this.arr[i] ?? "-");
                }
                Console.WriteLine();
            }
        }
    }
    
Designed by Tistory.