HackerRank/Data Structures 10

[HackerRank] Trees > Tree : Height of a Binary Tree

https://www.hackerrank.com/challenges/tree-height-of-a-binary-tree/problem 바이너리 트리의 높이를 구하는 문제다. int height(Node* root) { // Write your code here. int r = 0, l = 0; if(root->right!=nullptr){ r = height(root->right); r++; } if(root->left!=nullptr){ l = height(root->left); l++; } if(r>l) return r; else return l; } 왼쪽의 높이와 오른쪽의 높이를 구할 변수 l과 r을 설정해 주었다. if문으로 다음 노드가 nullptr이 아니라면 길이를 구해준다. r과 l중 긴 쪽..

[HackerRank] Linked Lists > Insert a Node at the Tail of a Linked List

https://www.hackerrank.com/challenges/insert-a-node-at-the-tail-of-a-linked-list/problem 연결리스트의 마지막에 노드를 삽입하는 문제다. SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) { if (head == NULL) { return create_singly_linked_list_node(data); } SinglyLinkedListNode *node = head; while (node->next != NULL) { node = node->next; } node->next = create_singly_linked_list_node(data); r..

[HackerRank C] Tree : Inorder Traversal

중위순회(Inorder) left -> root -> right 왼쪽자식노드 -> 부모노드 -> 오른쪽 자식노드순으로 방문한다. void inOrder( struct node *root) { if(root->left) inOrder(root->left); if(root) printf("%d ", root->data); if(root->right) inOrder(root->right); } 노드가 null이 아닌 것에 주의한다. left 노드를 먼저 방문하고 root 일 때 data를 출력한다. 마지막으로 right 노드를 방문한다. 재귀적으로 함수를 사용해 해결해주었다.

[HackerRank C] Tree : Postorder Traversal

이번엔 Postorder, 후위순회 문제이다. 후위순회 순서는 다음과 같다. 왼쪽 자식 노드 -> 오른쪽 자식 노드 -> 부모노드 [left -> right -> root] void postOrder( struct node *root) { if(root->left) postOrder(root->left); if(root->right) postOrder(root->right); if(root) printf("%d ", root->data); } 노드가 null이 되지 않게 주의한다. (if문으로 처리) 첫번째로 left노드, 두번째로 right노드를 돈다. 마지막으로 root를 도는데 이 때 data를 출력해준다.

[HackerRank C] Tree : Preoreder Traversal

전위순회로 트리를 출력하는 문제이다. 위의 트리를 전위순회로 거치면 1 2 5 3 4 6 순이다. void preOrder( struct node *root) { if(root) printf("%d ", root->data); if(root->left) preOrder(root->left); if(root->right) preOrder(root->right); } 주의할 점은 root가 NULL이 아니어야 한다는 것이다. 전위 순회는 root->left->right 노드 순이다. 이 순서를 따라 재귀적으로 코드를 짜주면 된다. if문으로 root가 null인지 아닌지 확인한 뒤 null이 아니라면 그 값을 출력한다. left 노드가 null이 아니면 preOrder 함수에 root->left를 인자로 넣..

[HackerRank] Arrays : 2D Array - DS

문제 배열을 입력받아 순서가 반대로 된 배열을 출력하는 문제이다. // Complete the reverseArray function below. // Please store the size of the integer array to be returned in result_count pointer. For example, // int a[3] = {1, 2, 3}; // // *result_count = 3; // // return a; // int* reverseArray(int a_count, int* a, int* result_count) { int *b; b = (int*)malloc(sizeof(int)*a_count); *result_count = a_count; for(int i=0; i