프로그래밍/C언어 C++언어

C/C++ - C를 이용한 간단한 이진 트리 예제

가카리 2015. 1. 25. 15:50
반응형

다음은 간단한 이진트리의 예제이며 단순히 공간을 만들고 메인 함수에서 수동적으로 왼쪽과 오른쪽으로 나누고 값을 넣어주는 예제입니다.


BinaryTree.h


#ifndef __BINARY_TREE_H__

#define __BINARY_TREE_H__


typedef int BTData

typedef struct _bTreeNode{

        BTData data

        struct _bTreeNode *left

        struct _bTreeNode *right


}BTreeNode


BTreeNode * MakeBTreeNode(void);//빈노드생성함수

BTData GetData(BTreeNode * bt);//bt의data 반환함수

void SetData(BTreeNode * bt, BTData data);//bt의data에입력받은data로세팅


BTreeNode * GetLeftSubTree(BTreeNode * bt);//왼쪽서브트리를가져옴

BTreeNode * GetRightSubTree(BTreeNode * bt);//오른쪽서브트리를가져옴


void MakeLeftSubTree(BTreeNode * main,BTreeNode * sub);//왼쪽서브트리를만듬

void MakeRightSubTree(BTreeNode * main,BTreeNode * sub);//오른쪽서브트리를만듬


#endif


BinaryTree.c


#include <stdio.h>

#include <stdlib.h>

#include "BinaryTree.h"


BTreeNode * MakeBTreeNode(void){

        BTreeNode * nd = (BTreeNode*)malloc(sizeof(BTreeNode));

        nd->left = NULL

        nd->right = NULL

        return nd

}

BTData GetData(BTreeNode * bt){

        return bt->data

}

void SetData(BTreeNode * bt, BTData data){

        bt->data = data

}


BTreeNode * GetLeftSubTree(BTreeNode * bt){

        return bt->left

}

BTreeNode * GetRightSubTree(BTreeNode * bt){

        return bt->right

}


void MakeLeftSubTree(BTreeNode * main,BTreeNode * sub){

        if(main->left != NULL)

                free(main->left);

        

        main->left = sub

}

void MakeRightSubTree(BTreeNode * main,BTreeNode * sub){

        if(main->right != NULL)

                free(main->right);

        

        main->right = sub     

}


main.c


#include <stdio.h>

#include "BinaryTree.h"


int main(){

        BTreeNode * bt1 = MakeBTreeNode();//노드bt1 생성

        BTreeNode * bt2 = MakeBTreeNode();

        BTreeNode * bt3 = MakeBTreeNode();

        BTreeNode * bt4 = MakeBTreeNode();

        

        SetData(bt1, 1);//bt1에데이터저장

        SetData(bt2, 2);//bt2에데이터저장

        SetData(bt3, 3);//bt3에데이터저장

        SetData(bt4, 4);//bt4에데이터저장


        MakeLeftSubTree(bt1, bt2);//bt2를bt1의왼쪽자식으로

        MakeRightSubTree(bt1, bt3);//bt3를bt1의오른쪽자식노드로

        MakeLeftSubTree(bt2, bt4);//bt4를bt2의왼쪽자식노드로

        

        printf("%d \n", GetData(GetLeftSubTree(bt1)));


        printf("%d \n", GetData(GetLeftSubTree(GetLeftSubTree(bt1))));

        

        return 0;

}



출력화면



반응형