typedef struct Tree Node int data struct Tree

  • Slides: 38
Download presentation

링크의 구현 ¢ 노드는 구조체로 표현 ¢ 링크는 포인터로 표현 typedef struct Tree. Node

링크의 구현 ¢ 노드는 구조체로 표현 ¢ 링크는 포인터로 표현 typedef struct Tree. Node { int data; struct Tree. Node *left, *right; } Tree. Node;

링크 표현법 프로그램 #include <stdio. h> #include <stdlib. h> #include <memory. h> typedef struct

링크 표현법 프로그램 #include <stdio. h> #include <stdlib. h> #include <memory. h> typedef struct Tree. Node { int data; struct Tree. Node *left, *right; } Tree. Node; // n 1 // / | // n 2 n 3 void main() { Tree. Node *n 1, *n 2, *n 3; n 1= (Tree. Node *)malloc(sizeof(Tree. Node)); n 2= (Tree. Node *)malloc(sizeof(Tree. Node)); n 3= (Tree. Node *)malloc(sizeof(Tree. Node));

전위순회 프로그램 ¢ 순환 호출을 이용한다. preorder(x) if x≠NULL then print DATA(x); preorder(LEFT(x)); preorder(RIGHT(x));

전위순회 프로그램 ¢ 순환 호출을 이용한다. preorder(x) if x≠NULL then print DATA(x); preorder(LEFT(x)); preorder(RIGHT(x));

중위 순회 알고리즘 ¢ 순환 호출을 이용한다. inorder(x) if x≠NULL then inorder(LEFT(x)); print DATA(x);

중위 순회 알고리즘 ¢ 순환 호출을 이용한다. inorder(x) if x≠NULL then inorder(LEFT(x)); print DATA(x); inorder(RIGHT(x));

후위 순회 알고리즘 ¢ 순환 호출을 이용한다. postorder(x) if x≠NULL then postorder(LEFT(x)); postorder(RIGHT(x)); print

후위 순회 알고리즘 ¢ 순환 호출을 이용한다. postorder(x) if x≠NULL then postorder(LEFT(x)); postorder(RIGHT(x)); print DATA(x);

순회 프로그램 typedef struct Tree. Node { int data; struct Tree. Node *left, *right;

순회 프로그램 typedef struct Tree. Node { int data; struct Tree. Node *left, *right; } Tree. Node; // 15 // 4 20 // 1 16 25 Tree. Node n 1={1, NULL}; Tree. Node n 2={4, &n 1, NULL}; Tree. Node n 3={16, NULL}; Tree. Node n 4={25, NULL}; Tree. Node n 5={20, &n 3, &n 4}; Tree. Node n 6={15, &n 2, &n 5}; Tree. Node *root= &n 6;

// 중위 순회 inorder( Tree. Node *root ){ if ( root ){ inorder( root->left

// 중위 순회 inorder( Tree. Node *root ){ if ( root ){ inorder( root->left ); printf("%d", root->data ); inorder( root->right ); } } // 전위 순회 preorder( Tree. Node *root ){ if ( root ){ printf("%d", root->data ); preorder( root->left ); preorder( root->right ); } } // 왼쪽서브트리 순회 // 노드 방문 // 오른쪽서브트리 순회 // 노드 방문 // 왼쪽서브트리 순회 // 오른쪽서브트리 순회

// 후위 순회 postorder( Tree. Node *root ){ if ( root ){ postorder( root->left

// 후위 순회 postorder( Tree. Node *root ){ if ( root ){ postorder( root->left ); postorder( root->right ); printf("%d", root->data ); } } void main() { inorder(root); preorder(root); postorder(root); } // 왼쪽 서브 트리 순회 // 오른쪽 서브 트리 순회 // 노드 방문