트리도 Linked List와 마찬가지로 구현하였다.
다만 트리의 삭제는 위치를 변경해줘야하므로 구현하기 힘들어 입력과 출력만 구현하였다.
1 2 3 4 5 6 | struct Tree { int value; Tree* pLeft; Tree* pRight; }; | cs |
구조체는 LinkedList와 마찬가지로 생성.
다만 트리이므로 왼쪽과 오른쪽에 하나씩 이어지므로 포인터가 2개 필요하다.
1. 입력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void Add(Tree* pNode, Tree* pNew) { if (pNode->value > pNew->value) { if (pNode->pLeft != NULL) Add(pNode->pLeft, pNew); else pNode->pLeft = pNew; } else { if (pNode->pRight != NULL) Add(pNode->pRight, pNew); else pNode->pRight = pNew; } } | cs |
입력 이전에 데이터를 추가하는 함수를 하나 만들었다.
노드부터 시작해 새로운값이 크면 오른쪽, 작으면 왼쪽으로 추가하되,
비어있다면 바로 그자리에 넣고 값이 있다면 계속 타고가면서 비교하여 들어갈 자리에 넣는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | if (menu == 1) { int input = 0; cout << "입력할 값은? : "; cin >> input; Tree* pNewData = new Tree; pNewData->value = input; pNewData->pLeft = NULL; pNewData->pRight = NULL; if (head == NULL) { head = pNewData; } else { Add(head, pNewData); } cout << "값이 입력되었습니다. \n\n"; } | cs |
입력은 LinkedList와 마찬가지로 새로운 데이터를 만들어 노드(=head)가 비어있으면 새로운값을 노드로.
아니면 함수를 이용해 쭉 타고가면서 들어갈 자리에 입력된다.
2. 출력
1 2 3 4 5 6 7 8 | void print(Tree* pData) { if (pData->pLeft) print(pData->pLeft); cout << pData->value << " "; if (pData->pRight) print(pData->pRight); } | cs |
출력도 재귀함수를 이용해 출력하는 함수를 하나 만들었다.
왼쪽이 존재하면 왼쪽으로 들어가고, 없으면 자기자신 출력, 이후 오른쪽이 존재하면 들어간다.
이렇게 반복하면 트리의 구조상 순서대로 잘 출력될 것이다.
1 2 3 4 5 | else if (menu == 2) { print(head); cout << "\n\n"; } | cs |
그래서 출력은 함수 한번 불러주면 끝
'프로그래밍 공부 > C++' 카테고리의 다른 글
객체지향, 클래스 (0) | 2018.03.21 |
---|---|
동물 스무고개(?) (Tree연습 예제) (0) | 2018.03.21 |
Linked List (구조체 이용) (0) | 2018.03.21 |
구조체(struct) (0) | 2018.03.21 |
문자열 길이구하기, 복사하기, 추가하기 (포인터 이용) (0) | 2018.03.12 |