데이터 구조 - 트 리 관련 알고리즘 구현
이 진 트 리 의 옮 겨 다 니 기 (선, 중, 후), 이 진 트 리 의 차원, 이 진 트 리 의 깊이, 이 진 트 리 의 잎 노드 수 계산 을 포함한다.관련 알고리즘 사상 은 책 을 읽 을 수 있 는데 여 기 는 관련 알고리즘 을 제시 하여 실현 할 뿐이다.
코드 구현
#include
#include
#define MAXSIZE 30
typedef char ElemType;
typedef struct TNode {
char data;
TNode * lchild;
TNode * rchild;
}TNode, *BiTree;
int IsEmpty_BiTree(BiTree *T) {
if(*T == NULL)
return 1;// ,
else
return 0;
}
void Create_BiTree(BiTree *T){
char ch;
ch = getchar();
// "#" ,
if(ch == '#')
*T = NULL;
//
else{
*T = (BiTree)malloc(sizeof(struct TNode));
(*T)->data = ch; //
//
Create_BiTree(&(*T)->lchild);
//
Create_BiTree(&(*T)->rchild);
}
}
void TraverseBiTree(BiTree T) { //
if(T == NULL)// ,
return;
else {
printf("%c ",T->data);
TraverseBiTree(T->lchild);
TraverseBiTree(T->rchild);
}
}
void InOrderBiTree(BiTree T) { //
if(NULL == T)
return;
else {
InOrderBiTree(T->lchild);
printf("%c ",T->data);
InOrderBiTree(T->rchild);
}
}
void PostOrderBiTree(BiTree T) {
if(NULL == T)
return;
else {
InOrderBiTree(T->lchild);
InOrderBiTree(T->rchild);
printf("%c ",T->data);
}
}
int TreeDeep(BiTree T) {
int deep = 0;
if(T)
{
int leftdeep = TreeDeep(T->lchild);
int rightdeep = TreeDeep(T->rchild);
deep = leftdeep+1 > rightdeep+1 ? leftdeep+1 : rightdeep+1;
}
return deep;
}
//
int Leafcount(BiTree T, int &num) {//
if(T)
{
if(T->lchild ==NULL && T->rchild==NULL)
{
num++;
printf("%c ",T->data);
}
Leafcount(T->lchild,num);
Leafcount(T->rchild,num);
}
return num;
}
// ( , )
void LevelOrder_BiTree(BiTree T){
// ,
int front = 0;
int rear = 0;
BiTree BiQueue[MAXSIZE];
BiTree tempNode;
if(!IsEmpty_BiTree(&T)){
BiQueue[rear++] = T;
while(front != rear){//
// ,
tempNode = BiQueue[front++];
// , ,
if(!IsEmpty_BiTree(&(tempNode->lchild)))
BiQueue[rear++] = tempNode->lchild;
if(!IsEmpty_BiTree(&(tempNode->rchild)))
BiQueue[rear++] = tempNode->rchild;
printf("%c ",tempNode->data);
}
}
}
int main(void)
{
BiTree T;
BiTree *p = (BiTree*)malloc(sizeof(BiTree));
int deepth,num=0 ;
Create_BiTree(&T);//
printf(" :
");
TraverseBiTree(T);
printf("
");
printf(" :
");
InOrderBiTree(T);
printf("
");
printf(" :
");
PostOrderBiTree(T);
printf("
:");
LevelOrder_BiTree(T);
printf("
");
deepth=TreeDeep(T);
printf(" :%d",deepth);
printf("
");
printf(" :");
Leafcount(T,num);
printf("
:%d",num);
return 0;
}
데모 실행
단서 이 진 트 리 의 중간 순서
#include
#include
using namespace std;
typedef struct BiThrNode
{
char data;
struct BiThrNode *lchild,*rchild; /* */
int LTag,RTag; /* */
}BiThrNode,*BiThrTree;
BiThrTree pre;
void CreateBiTree(BiThrTree *T){
char ch;
ch = getchar();
// "#" ,
if(ch == '#')
*T = NULL;
//
else{
*T = (BiThrTree)malloc(sizeof(struct BiThrNode));
(*T)->data = ch; //
//
CreateBiTree(&(*T)->lchild);
//
CreateBiTree(&(*T)->rchild);
}
}
/* p */
void InThreading(BiThrTree p)
{
/*pre , , */
if(p)
{
InThreading(p->lchild); /* */
if(!(p->lchild) ) /*p */
{
p->LTag=1; /* p */
p->lchild=pre; /*p pre( )*/
}
else
{
p->LTag=0;
}
if(!(pre->rchild) ) /*pre */
{
pre->RTag=1; /* pre */
pre->rchild=p; /*pre p( )*/
}
else
{
pre->RTag=0;
}
pre=p; /* pre p */
InThreading(p->rchild); /* */
}
}
/* */
void InOrderThreading(BiThrTree &Thrt,BiThrTree T)
{
/* T, ,Thrt */
Thrt=new BiThrNode; /* */
Thrt->LTag=0; /* , , */
Thrt->RTag=1; /* */
Thrt->rchild=Thrt; /* */
if(!T) Thrt->lchild=Thrt; /* , */
else
{
Thrt->lchild=T; pre=Thrt; /* ,pre */
InThreading(T); /* , T */
pre->rchild=Thrt; /* ,pre ,pre */
pre->RTag=1;
Thrt->rchild=pre; /* pre*/
}
}
/* */
void InOrderTraverse_Thr(BiThrTree T)
{
/*T , lchild */
/* T , */
BiThrTree p=T->lchild; /*p */
while(p!=T)
{
while(p->LTag == 0) /* */
{
p=p->lchild;
}
cout<data<RTag == 1 && p->rchild!=T) /* */
{
p=p->rchild;
cout<data<rchild;
}
cout<data;
}
int main()
{
BiThrTree T;
BiThrTree Thrt;
cout<
데모 실행
이 진 트 리 구성 도
참고 문헌
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.