티스토리 뷰

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

트리

오치리 2009. 1. 18. 11:07

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

typedef struct node NODE;
struct node
{
 int key;
 NODE *parent;
 NODE *left;
 NODE *right;

};

NODE *root;

NODE* node_search(int key, NODE *root)
{
 NODE *s;
 s = root->left;
 while(key != s->key && s != NULL)
 {
  if(key < s->key )
   s = s->left;
  if(key > s->key )
   s = s->right;
 }
 if(s == NULL)
  return NULL;
 else
  return s;
}

NODE * node_insert(int key)
{
 NODE *p,*s;
 p = root;
 s = root->left;

 while(s != NULL)
 {
  p = s;
  if( key < s->key )
   s = s->left;
  if( key > s->key )
   s = s->right;
 }
 if( (s = (NODE*)malloc(sizeof(NODE))) == NULL)
  return NULL;
 s->key = key;
 s->left = NULL;
 s->right = NULL;
 if( key <p->key || p == root)
  p->left = s;
 else
  p->right = s;
 return s;
}
void init()
{
 root = (NODE*)malloc(sizeof(NODE));
 root->left = root->right = NULL;
}
void Insert_node(int key)
{
 if(!root)
 {
  root = (NODE*)malloc(sizeof(NODE));
  root->left = root->right = NULL;
  root->key = key;
  root->parent = NULL;
 
 }
 else
 {
  NODE *par,*tmp;
 
  par = tmp = root;
 
  while(tmp != NULL)
  {
   if( tmp->key == key)
    break;
   if( tmp->key > key )
   {
    if( tmp->left == NULL )
    {
     par = tmp;
     tmp = tmp->left;
     tmp = (NODE*)malloc(sizeof(NODE));
     tmp->parent = par;
     par->left = tmp;
     tmp->left = tmp->right = NULL;
     tmp->key = key;
     break;
    }
    else
    {
     tmp = tmp->left;
    }
   }
   if( tmp->key < key )
   {
    if( tmp->right == NULL )
    {
     par = tmp;
     tmp = tmp->right;
     tmp = (NODE*)malloc(sizeof(NODE));
     tmp->parent = par;
     par->right = tmp;
     tmp->right = tmp->left = NULL;
     tmp->key = key;
     break;
    }
    else
    {
     tmp = tmp->right;
    }
   }
  }
 }
}
void Visit_Node(NODE* node)
{
 printf("%d\n",node->key);
}
void Display_Node(NODE* node)
{
 if( node != NULL )
 {
  Display_Node(node->left);
  Visit_Node(node);
  Display_Node(node->right);
 }
}

bool Delete_Node(int key)
{/* 생략 */}


void main()
{

 Insert_node(4);
 Insert_node(1);
 Insert_node(1);
 Insert_node(5);
 Insert_node(13);
 Insert_node(41);
 Insert_node(112);
 Insert_node(61);
 Insert_node(11);

 Display_Node(root);
 //printf("%d\n%d\n%d\n%d\n",root->key,root->left->key,root->right->key);
 //printf("%d\n%d\n%d\n%d\n",root->key,root->left->key,root->left->left->key);
}

'프로그래밍 언어 > 프로그래밍' 카테고리의 다른 글

유니티 점프  (0) 2016.06.08
해시 테이블 (hash table)  (0) 2009.01.18
연결 리스트 (문장<이름>)  (0) 2009.01.18
연결 리스트 (한 글자)  (0) 2009.01.18
퀵정렬  (0) 2009.01.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함