-
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(); } } }
'자료구조 > 수업내용' 카테고리의 다른 글
03/31 수업내용 메모 (0) 2021.03.31 03/31 BinaryTree 전위, 중위, 후위 순회 출력 (0) 2021.03.31 03/30 수업내용 메모 (0) 2021.03.30 03/30 단일 연결 리스트로 Stack 구현 (0) 2021.03.30 03/30 고정배열로 Stack 구현하기 (0) 2021.03.30