C 언어 이 진 트 리 특성 상세 설명 및 인 스 턴 스 코드 찾기

이 진 트 리 성질 찾기
1.이 진 트 리
모든 나무의 노드 에 최대 두 개의 노드 가 있 는 나 무 를 이 진 트 리 라 고 한다.

2.두 갈래 찾기 트 리
이 진 트 리 는 이 진 트 리 의 구조 에 따라 조직 되 고 성질 을 만족 시 킵 니 다.
한 노드 의 모든 왼쪽 트 리 의 노드 는 뚜껑 노드 보다 크 지 않 고 모든 오른쪽 트 리 의 노드 는 이 노드 보다 작 지 않다.
트 리 를 찾 는 작업 조회,삽입,삭제 등 작업 의 시간 복잡 도와 나무의 높이 가 정비례 하기 때문에 효율 적 인 트 리 를 구축 하 는 것 이 특히 중요 하 다.
트 리 옮 겨 다 니 기 찾기
선착순
나 무 를 찾 아 옮 겨 다 니 는 것 은 재 귀적 인 방법 으로 쉽게 이 루어 질 수 있다.

struct list
{
  struct list *left;//   
  struct list *right;//   
  int a;//    
};
void preorder(struct list *t)//t       
{
  if(t!=NULL)
  {
    printf("%d,",t->a);
    preorder(t->left);
    perorder(t->right);
  }
}
중간 순서 로 옮 겨 다 닌 다.

struct list
{
  struct list *left;//   
  struct list *right;//   
  int a;//    
};
void preorder(struct list *t)//t       
{
  if(t!=NULL)
  {
    preorder(t->left);
    printf("%d,",t->a);
    perorder(t->right);
  }
}
뒤 순 서 를 옮 겨 다 닌 다.

struct list
{
  struct list *left;//   
  struct list *right;//   
  int a;//    
};
void preorder(struct list *t)//t       
{
  if(t!=NULL)
  {
    preorder(t->left);
    perorder(t->right);
    printf("%d,",t->a);
  }
}
트 리 검색
키워드 k 를 지정 하여 검색 을 하고 결점 의 지침 을 되 돌려 줍 니 다.

struct list
{
  struct list *left;//   
  struct list *right;//   
  int a;//    
};
struct list * search(struct list *t,int k)
{
  if(t==NULL||t->a==k)
    return t;
  if(t->a<k)
    search(t->right);
  else
    search(t>left);
};
재 귀적 이지 않 은 형식 으로 찾 아 볼 수도 있 습 니 다.

struct list
{
  struct list *left;//   
  struct list *right;//   
  int a;//    
};
struct list * search(struct list *t,int k)
{
  while(true)
  {
    if(t==NULL||t->a==k)
    {
      return t;
      break;
    }
    if(t->a<k)
      t=t->rigth;
    else
      t=t->left;

  }
};

최대 값 과 최소 값 조회
트 리 의 성질 에 따라 최소 값 이 가장 왼쪽 에 있 는 결점,최대 값 의 가장 오른쪽 에 있 는 결점 을 찾 을 수 있 기 때문에 직접 찾 을 수 있 습 니 다.
다음은 최대 값 의 예 입 니 다.

{
  struct list *left;//   
  struct list *right;//   
  int a;//    
};
struct lsit *max_tree(struct lsit *t)
{
  while(t!=NULL)
  {
    t=t->right;
  }
  return t;
};
트 리 삽입 및 삭제 찾기
삽입 과 삭 제 는 트 리 의 성질 을 파괴 할 수 없 기 때문에 성질 에 따라 트 리 에서 해당 하 는 위 치 를 찾 으 면 삽입 과 삭제 작업 을 할 수 있 습 니 다.

struct list
{
  struct list *left;//   
  struct list *right;//   
  int a;//    
};
void insert(struct list *root,struct list * k)
{
  struct list *y,*x;
  x=root;
  while(x!=NULL)
  {
    y=x;
    if(k->a<x->a)
    {
      x=x->left;
    }
    else
      x=x->right;
  }
  if(y==NULL)
    root=k;
  else if(k->a<y->a)
    y->left=k;
  else
    y->right=k;

}

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기