양의 정수 n (n > 0) 를 scanf_s 로 입력 받은 뒤, recursive function 을 이용하여 linked representation 으로 다음
규칙에 따라 binary tree 를 구성한 뒤, inorder traversal 결과를 화면 출력하라.
- data 값이 n 인 root node 를 생성한다.
- root 를 포함하여 tree 내의 모든 node 에 대해, node N 의 data 값이 k 이면, N 의 left child 는 k*2 를, N 의 right child 는 k+2 를 data 값으로 갖게 한다.
- node 의 data 값 k 가 k>5 이면 leaf node 가 되도록 (child 를 갖지 않도록) 처리한다.
#include <iostream>
#include <fstream>
using namespace std;
typedef struct node* treePointer;
typedef struct node {
int data;
treePointer leftChild, rightChild;
};
// 부모노드 포인터 매개변수로 재귀 이용해 이진트리 생성하기
treePointer treeMake(treePointer ptr) {
treePointer leftNode, rightNode;
leftNode = (treePointer)malloc(sizeof(*leftNode));
rightNode = (treePointer)malloc(sizeof(*rightNode));
if (ptr->data > 5) {
ptr->leftChild = NULL; ptr->rightChild = NULL;
return ptr;
}
leftNode->data = ptr->data * 2; //node의 데이터에 ptr->data*2값 넣음
ptr->leftChild = treeMake(leftNode); //rightChild는 node를 가리킴
rightNode->data = ptr->data + 2;
ptr->rightChild = treeMake(rightNode);
return ptr;
}
void inorder(treePointer ptr) {
if (ptr) {
inorder(ptr->leftChild); //ptr->leftChild를 매개변수로 재귀==leftChild가 null일때까지 재귀
printf("%d ", ptr->data);
inorder(ptr->rightChild);
}
}
int main() {
treePointer root;
root = (treePointer)malloc(sizeof(*root));
scanf_s("%d", &root->data);
treeMake(root);
inorder(root);
}
// 2
// 4 4
// 8 6 8 6
Ex1)
scanf_s 입력
n: 2
<화면출력>
8 4 6 2 8 4 6
Ex2)
scanf_s 입력
n: 3
<화면출력>
6 3 10 5 7