간단한 트리의 귀속, 비귀속 생성, 앞뒤 순서 반복
4120 단어 비귀속
#include<stdlib.h>
#define null 0
struct tree{
struct tree* left;
int value;
struct tree* right;
};
typedef struct tree Tree;
Tree* root;
Tree* insert_rcs(Tree* root, int value){
//
if(root == null){
root = malloc(sizeof(Tree));
root->value = value;
root->left = null;
root->right = null;
//
return root;
}
if(root->value > value){
root->left = insert_rcs(root->left, value);
}else{
root->right = insert_rcs(root->right, value);
}
return root;
}
Tree* insert_no_rcs(Tree* root, int value){
Tree* newnode = malloc(sizeof(Tree));
newnode->value = value;
newnode->left = null;
newnode->right = null;
if(root == null){
root = newnode;
return root;
}
//p
Tree* p = root;
//p ,pre
Tree* pre;
while(p){
pre = p;
if(p->value > value){
p = p->left;
}else{
p = p->right;
}
}
if(pre->value > newnode->value){
pre->left = newnode;
}else{
pre->right = newnode;
}
return root;
}
//
void pre_print_rcs(Tree* root){
if(root != null){
printf("value: %d \t",root->value);
pre_print_rcs(root->left);
pre_print_rcs(root->right);
}
}
Tree* Stack[20];
int top = -1;
//
void pre_print_no_rcs(Tree* root){
//top != -1 ,
while(root != null || top != -1){
if(root != null){
printf("%d \t",root->value);
if(top+1 != 20){
Stack[++top] = root;
root = root->left;
}
}else{
root = Stack[top--]->right;
}
}
}
//
void in_print_rcs(Tree* root){
if(root != null){
in_print_rcs(root->left);
printf("value: %d \t",root->value);
in_print_rcs(root->right);
}
}
//
void in_print_no_rcs(Tree* root){
//top != -1 ,
while(root != null || top != -1){
if(root != null){
if(top+1 != 20){
Stack[++top] = root;
root = root->left;
}
}else{
root = Stack[top--];
printf("%d \t",root->value);
root = root->right;
}
}
}
//
void post_print_rcs(Tree* root){
if(root != null){
post_print_rcs(root->left);
post_print_rcs(root->right);
printf("value: %d \t",root->value);
}
}
Tree* Q[20];
int front;
int rear;
//
// ,
void level_print(Tree* root){
front = rear = 0;
if(root != null){
Q[++rear] = root;
while(rear != front){
Tree* p = Q[++front];
printf("%d \t",p->value);
if(p->left != null){
Q[++rear] = p->left;
}
if(p->right != null){
Q[++rear] = p->right;
}
}
}
}
Tree* create_no_rcs(int* list, int n){
int i;
for(i=0; i<n; i++){
root = insert_no_rcs(root, list[i]);
}
return root;
}
Tree* create_rcs(int* list, int n){
int i;
for(i=0; i<n; i++){
root = insert_rcs(root, list[i]);
}
return root;
}
int main(){
int list[10] = {
6,9,7,4,5,2,1,8,12,0
};
//root = create_no_rcs(list, 10);
root = create_rcs(list, 10);
//pre_print_rcs(root);
//pre_print_no_rcs(root);
in_print_rcs(root);
in_print_no_rcs(root);
//post_print_rcs(root);
//level_print(root);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【LeetCode】104. Maximum Depth of Binary Tree(DFS|BFS)Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the ro...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.