데이터 구조의 이 진 트 리 의 비 재 귀적 옮 겨 다 니 기
// Tree.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#include "stack"
using namespace std;
typedef struct node
{
int data;
struct node *lchild;
struct node *rchild;
}BiTNode, *BiTree;
int CreateBiTree(BiTree &T);
int CreateBiTree(BiTree &T,int &index);
void PreOrder(BiTree root);
void InOrder(BiTree root);
void PostOrder(BiTree root);
int InOrderTraverse(BiTree root);
int InOrderTraverse2(BiTree root);
int element[]={3,7,3,2,1,0,0,7,0,0,0,8,0,10,0,0,17,18,0,0,19,0,27,0,0};
static int index=0;
stack<BiTree> S; //
int _tmain(int argc, _TCHAR* argv[])
{
BiTree tree;
//
CreateBiTree(tree,index);
printf("
");
printf("
");
PreOrder(tree);
printf("
");
printf("
");
InOrder(tree);
printf("
");
printf("
");
PostOrder(tree);
printf("
");
printf("
");
InOrderTraverse(tree);
printf("
");
printf(" , 2
");
InOrderTraverse2(tree);
printf("
");
system("pause");
return 0;
}
// ,
int CreateBiTree(BiTree &T)
{
int data;
scanf("%d",&data);
if (data==0) // 0
{
T=NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if (!T)
{
return -1;
}
else
{
T->data=data;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
return 1;
}
// , ,
int CreateBiTree(BiTree &T,int &index)
{
int data=element[index];
if (data==0) // 0
{
T=NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if (!T)
{
return -1;
}
else
{
T->data=data;
CreateBiTree(T->lchild,++index);
CreateBiTree(T->rchild,++index);
}
}
return 1;
}
//
void PreOrder(BiTree root)
{
if (root!=NULL)
{
printf("%3d",root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
//
void InOrder(BiTree root)
{
if (root!=NULL)
{
InOrder(root->lchild);
printf("%3d",root->data);
InOrder(root->rchild);
}
}
//
void PostOrder(BiTree root)
{
if (root!=NULL)
{
PostOrder(root->lchild);
PostOrder(root->rchild);
printf("%3d",root->data);
}
}
// , , 1
int InOrderTraverse(BiTree root)
{
S.push(root);
BiTree p;
while(!S.empty())
{
while((p=S.top())&&p) //
{
S.push(p->lchild); // ,
}
S.pop(); //
if (!S.empty())
{
p=S.top();
S.pop();//
printf("%3d",p->data); //
S.push(p->rchild); // ,
}
}
return 1;
}
// , , 2
int InOrderTraverse2(BiTree root)
{
stack<BiTree> S;
BiTree p=root;
// , , ,
while(p||!S.empty())
{
if (p) //
{
S.push(p); // ,
p=p->lchild;
}
else
{
// ,
p=S.top();
S.pop(); // , ,
printf("%3d",p->data);
p=p->rchild; // ,
}
}
return 1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.