[학습 점적 - 데이터 구조 - 이 진 트 리] 이 진 트 리 를 더 블 링크 로 변환 합 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEAF -1
typedef struct BTreenode{
BTreenode* lchild;
BTreenode* rchild;
int value;
}BTreenode,*Btree;
BTreenode* createTree(){
BTreenode* T;
int t;
scanf("%d",&t);
if(t==LEAF){
T = NULL;
}else{
T = (BTreenode *) malloc(sizeof(BTreenode));
T->value = t;
T->lchild = createTree();
T->rchild = createTree();
}
return T;
}
void doChange(BTreenode* root,BTreenode * &head,BTreenode* &tail){
BTreenode * left,*right;
if(root == NULL){
head = tail = NULL;
return;
}
doChange(root->lchild,head,left);
doChange(root->rchild,right,tail);
if(left != NULL){
left->rchild = root;
root->lchild = left;
}else{
head = root;
}
if(right != NULL){
root->rchild = right;
right->lchild = root;
}else{
tail = root;
}
}
BTreenode * TreeToLinkedList(BTreenode* root){
BTreenode* head = NULL,*tail = NULL;
doChange(root,head,tail);
return head;
}
void preOrder(BTreenode * root){
if(root!=NULL){
printf("%d ",root->value);
}
if(root->lchild != NULL){
preOrder(root->lchild);
}
if(root->rchild !=NULL){
preOrder(root->rchild);
}
}
void traverse(BTreenode * head){
printf("traverse: ");
BTreenode * iter = head;
while(iter != NULL){
printf("%d ",iter->value);
iter = iter->rchild;
}
printf("
");
}
void reTraverse(BTreenode * root){
printf("reTraverse: ");
BTreenode * iter = root;
while(iter!= NULL && iter->rchild != NULL){
iter = iter->rchild;
}
while(iter!=NULL){
printf("%d ",iter->value);
iter = iter->lchild;
}
printf("
");
}
main(){
BTreenode *root;
root = createTree();
preOrder(root);
printf("
");
root = TreeToLinkedList(root);
traverse(root);
reTraverse(root);
system("pause");
return 0;
}
//TODO 2: ~~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
9-1. 구조체와 클래스 비교, 구조체 개념(struct)구조체와 클래스는 프로그램 코드의 구성요소가 되는 범용 구조이다. 상수, 변수, 그리고 함수를 정의하는 것과 같은 구문을 사용해서 구조체와 클래스에 프로퍼티와 메서드를 기능적으로 추가할 수 있다. 스위프트에서 클래스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.