이 진 트 리 기본 조작 c 구현
/*
Name:
Author: Unimen
Date: 2011/10/6 23:42:57
*/
#ifndef _BITREE_H_
#define _BITREE_H_
const int maxn = 100; //
typedef char ElemType;
typedef struct node
{
ElemType value;
struct node *pLChild, *pRChild;
}BiTNode, *PBiTNode;
//
void CreateBiTree(PBiTNode &root);
//
void RecurPreOrder(PBiTNode root);
//
void PreOrder(PBiTNode root);
//
void RecurInOrder(PBiTNode root);
//
void InOrder(PBiTNode root);
//
void RecurPostOrder(PBiTNode root);
//
void PostOrder(PBiTNode root);
//
void bfs(PBiTNode root);
#endif
함수 구현 파일
/*
Name:
Author: Unimen
Date: 2011/10/6 23:42:57
*/
#include <iostream>
#include <cassert>
#include "BiTree.h"
using namespace std;
void CreateBiTree(PBiTNode &root)
{
char ch;
ch = cin.get();
if (' ' == ch)
{
while ((ch=cin.get()) != '
');
root = NULL;
}
else
{
root = new BiTNode;
root->value = ch;
while ((ch=cin.get()) != '
');
CreateBiTree(root->pLChild);
CreateBiTree(root->pRChild);
}
}
void RecurPreOrder(PBiTNode root)
{
if (root != NULL)
{
cout<<root->value<<" ";
PreOrder(root->pLChild);
PreOrder(root->pRChild);
}
}
void PreOrder(PBiTNode root)
{
assert(root);
PBiTNode stack[maxn];
int top = 0;
++top;
stack[top] = root;
while (top > 0)
{
root = stack[top];
--top;
cout<<root->value<<" ";
if (root->pRChild != NULL)
{
++top;
stack[top] = root->pRChild;
}
if (root->pLChild != NULL)
{
++top;
stack[top] = root->pLChild;
}
}
}
void RecurInOrder(PBiTNode root)
{
if (root != NULL)
{
RecurInOrder(root->pLChild);
cout<<root->value<<" ";
RecurInOrder(root->pRChild);
}
}
void InOrder(PBiTNode root)
{
assert(root);
PBiTNode stack[maxn];
int top = 0;
PBiTNode temp = NULL;
while (root!=NULL || top>0)
{
if (root != NULL)
{
++top;
stack[top] = root;
root = root->pLChild;
}
else
{
temp = stack[top];
--top;
cout<<temp->value<<" ";
root = temp->pRChild;
}
}
}
void RecurPostOrder(PBiTNode root)
{
if (root != NULL)
{
RecurPostOrder(root->pLChild);
RecurPostOrder(root->pRChild);
cout<<root->value<<" ";
}
}
// , , ,
void PostOrder(PBiTNode root)
{
assert(root);
bool bVisitedRight[maxn] = {false};
PBiTNode stack[maxn];
int top = 0;
PBiTNode temp = NULL;
while (root!=NULL || top>0)
{
if (root != NULL)
{
++top;
stack[top] = root;
root = root->pLChild;
bVisitedRight[top] = false;
}
else
{
temp = stack[top];
if (bVisitedRight[top] == true)
{
cout<<temp->value<<" ";
--top;
}
else
{
bVisitedRight[top] = true;
root = temp->pRChild;
}
}
}
}
void bfs(PBiTNode root)
{
assert(root);
PBiTNode queue[maxn];
PBiTNode temp = NULL;
int front, near;
near = front = 0;
++near;
queue[near] = root;
while (front < near)
{
front = (front + 1) % maxn;
temp = queue[front];
cout<<temp->value<<" ";
if (temp->pLChild != NULL)
{
near = (near + 1) % maxn;
queue[near] = temp->pLChild;
}
if (temp->pRChild != NULL)
{
near = (near + 1) % maxn;
queue[near] = temp->pRChild;
}
}
}
기능 테스트:
/*
Name:
Author: Unimen
Date: 2011/10/6 23:42:57
*/
#include <iostream>
#include "BiTree.h"
using namespace std;
int main()
{
PBiTNode root;
CreateBiTree(root);
cout<<" : ";
RecurPreOrder(root);
cout<<endl;
cout<<" :";
PreOrder(root);
cout<<endl;
cout<<" : ";
RecurInOrder(root);
cout<<endl;
cout<<" :";
InOrder(root);
cout<<endl;
cout<<" : ";
RecurPostOrder(root);
cout<<endl;
cout<<" :";
PostOrder(root);
cout<<endl;
cout<<" :";
bfs(root);
cout<<endl;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.