재귀로 이진 트리 생성, inorder traversal

SangJun·2022년 11월 2일
0

자료구조

목록 보기
16/18

양의 정수 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
profile
Let there be bit.

0개의 댓글