두 갈래 나무의 기본 조작 (귀속과 비귀속)
4409 단어 나무.
반복: #include
#include
#include
using namespace std;
#define MAX 20
int g_num;
typedef struct BTNode{ /* */
char data ; /* */
struct BTNode *lchild;
struct BTNode *rchild ; /* */
}BTNode,*BiTree;
void createBiTree(BiTree *t){ /* */
char s;
BiTree q;
s=getchar();
if(s=='#'){*t=NULL; return;}
q=(BiTree)malloc(sizeof(struct BTNode));
if(q==NULL){printf("Memory alloc failure!"); exit(0);}
q->data=s;
*t=q;
createBiTree(&q->lchild); /* */
createBiTree(&q->rchild); /* */
}
void PreOrder(BiTree p){ /* */
if ( p!= NULL ) {
printf("%c", p->data);
PreOrder( p->lchild ) ;
PreOrder( p->rchild) ;
}
}
void InOrder(BiTree p){ /* */
if( p!= NULL ) {
InOrder( p->lchild ) ;
printf("%c", p->data);
InOrder( p->rchild) ;
}
}
void PostOrder(BiTree p){ /* */
if ( p!= NULL ) {
PostOrder( p->lchild ) ;
PostOrder( p->rchild) ;
printf("%c", p->data);
}
}
void Preorder_n(BiTree p){ /* */
BiTree stack[MAX],q;
int top=0,i;
for(i=0;idata);
if(q->rchild!=NULL) stack[top++]=q->rchild;
if(q->lchild!=NULL) q=q->lchild;
else
if(top>0) q=stack[--top];
else q=NULL;
}
}
void release(BiTree t){ /* */
if(t!=NULL){
release(t->lchild);
release(t->rchild);
free(t);
}
}
//deepth
int Depth(BiTree p)
{
int m,n;
if(p==NULL)
{
return 0;
}
else
{
m = Depth(p->lchild);
n = Depth(p->rchild);
return (m>n) ? m+1 : n+1;
}
}
//sum of node
int Nodecount(BiTree p)
{
if(p==NULL)
{
return 0;
}
else
return Nodecount(p->lchild) + Nodecount(p->rchild) + 1;
}
//leaf
void countleaf(BiTree p)
{
if(p){
if(p->lchild==NULL&&p->rchild==NULL)
{
g_num++;
}
else{
countleaf(p->lchild);
countleaf(p->rchild);
}
}
}
BTNode* copyBiTree(BiTree T)
{
BiTree NLT = NULL;
BiTree NRT = NULL;
BiTree newNode = new BTNode;
if(T->lchild)
{
NLT = copyBiTree(T->lchild);
}
else
{
NLT = NULL;
}
if(T->rchild)
{
NRT = copyBiTree(T->rchild);
}
else
{
NRT = NULL;
}
if(newNode == NULL)
{
return 0;
}
newNode->lchild = NLT;
newNode->rchild = NRT;
newNode->data = T->data;
return newNode;
}
int main(){
BiTree t=NULL;
printf("
please input data:(exit for #)");
createBiTree(&t);
BiTree newT = NULL;
newT = copyBiTree(t);
g_num = 0;
cout<
비반복: #include
#include
#include
#include
#include
using namespace std;
typedef struct BiTreeNode
{
struct BiTreeNode * lchild;
struct BiTreeNode * rchild;
char data;
}BiTreeNode,*BiTree;
void createBiTree(BiTree *t){ /* */
char s;
BiTree q;
s=getchar();
if(s=='#'){*t=NULL; return;}
q=(BiTree)malloc(sizeof(struct BiTreeNode));
if(q==NULL){printf("Memory alloc failure!"); exit(0);}
q->data=s;
*t=q;
createBiTree(&q->lchild); /* */
createBiTree(&q->rchild); /* */
}
BiTreeNode *GoFarLeft(BiTreeNode *T,stack &s)
{
if(T==NULL)
{
return NULL;
}
while(T->lchild)
{
s.push(T);
T = T->lchild;
}
return T;
}
void InOrder(BiTree T)
{
stack s;
//step 1: ,
BiTree t = GoFarLeft(T,s);
while(t)
{
cout<data<rchild!=NULL)
{
t = GoFarLeft(t->rchild,s);
}
//visit the stack top element
else if(!s.empty())
{
t = s.top();
s.pop();
}
//if rchild is null&&stack is empty
else
{
t = NULL;
}
}
}
int main()
{
BiTree T;
cout<
주: 비귀속은 c++ 창고 용기에 사용되며, 배우지 못하면 창고 프로그램을 직접 작성할 수도 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
예제 1.15 UVALive-3902 트리의 검색
컨베이어 도어
제목 대의: n대의 기계는 하나의 트리 네트워크로 연결되어 잎 노드는 클라이언트이고 다른 노드는 서버이다.
처음에는 한 대의 서버만 하나의 서비스를 제공했지만 k의 거리 내의 클라이언트만 덮어쓸 수 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#include
#include
#include
using namespace std;
#define MAX 20
int g_num;
typedef struct BTNode{ /* */
char data ; /* */
struct BTNode *lchild;
struct BTNode *rchild ; /* */
}BTNode,*BiTree;
void createBiTree(BiTree *t){ /* */
char s;
BiTree q;
s=getchar();
if(s=='#'){*t=NULL; return;}
q=(BiTree)malloc(sizeof(struct BTNode));
if(q==NULL){printf("Memory alloc failure!"); exit(0);}
q->data=s;
*t=q;
createBiTree(&q->lchild); /* */
createBiTree(&q->rchild); /* */
}
void PreOrder(BiTree p){ /* */
if ( p!= NULL ) {
printf("%c", p->data);
PreOrder( p->lchild ) ;
PreOrder( p->rchild) ;
}
}
void InOrder(BiTree p){ /* */
if( p!= NULL ) {
InOrder( p->lchild ) ;
printf("%c", p->data);
InOrder( p->rchild) ;
}
}
void PostOrder(BiTree p){ /* */
if ( p!= NULL ) {
PostOrder( p->lchild ) ;
PostOrder( p->rchild) ;
printf("%c", p->data);
}
}
void Preorder_n(BiTree p){ /* */
BiTree stack[MAX],q;
int top=0,i;
for(i=0;idata);
if(q->rchild!=NULL) stack[top++]=q->rchild;
if(q->lchild!=NULL) q=q->lchild;
else
if(top>0) q=stack[--top];
else q=NULL;
}
}
void release(BiTree t){ /* */
if(t!=NULL){
release(t->lchild);
release(t->rchild);
free(t);
}
}
//deepth
int Depth(BiTree p)
{
int m,n;
if(p==NULL)
{
return 0;
}
else
{
m = Depth(p->lchild);
n = Depth(p->rchild);
return (m>n) ? m+1 : n+1;
}
}
//sum of node
int Nodecount(BiTree p)
{
if(p==NULL)
{
return 0;
}
else
return Nodecount(p->lchild) + Nodecount(p->rchild) + 1;
}
//leaf
void countleaf(BiTree p)
{
if(p){
if(p->lchild==NULL&&p->rchild==NULL)
{
g_num++;
}
else{
countleaf(p->lchild);
countleaf(p->rchild);
}
}
}
BTNode* copyBiTree(BiTree T)
{
BiTree NLT = NULL;
BiTree NRT = NULL;
BiTree newNode = new BTNode;
if(T->lchild)
{
NLT = copyBiTree(T->lchild);
}
else
{
NLT = NULL;
}
if(T->rchild)
{
NRT = copyBiTree(T->rchild);
}
else
{
NRT = NULL;
}
if(newNode == NULL)
{
return 0;
}
newNode->lchild = NLT;
newNode->rchild = NRT;
newNode->data = T->data;
return newNode;
}
int main(){
BiTree t=NULL;
printf("
please input data:(exit for #)");
createBiTree(&t);
BiTree newT = NULL;
newT = copyBiTree(t);
g_num = 0;
cout<
#include
#include
#include
#include
#include
using namespace std;
typedef struct BiTreeNode
{
struct BiTreeNode * lchild;
struct BiTreeNode * rchild;
char data;
}BiTreeNode,*BiTree;
void createBiTree(BiTree *t){ /* */
char s;
BiTree q;
s=getchar();
if(s=='#'){*t=NULL; return;}
q=(BiTree)malloc(sizeof(struct BiTreeNode));
if(q==NULL){printf("Memory alloc failure!"); exit(0);}
q->data=s;
*t=q;
createBiTree(&q->lchild); /* */
createBiTree(&q->rchild); /* */
}
BiTreeNode *GoFarLeft(BiTreeNode *T,stack &s)
{
if(T==NULL)
{
return NULL;
}
while(T->lchild)
{
s.push(T);
T = T->lchild;
}
return T;
}
void InOrder(BiTree T)
{
stack s;
//step 1: ,
BiTree t = GoFarLeft(T,s);
while(t)
{
cout<data<rchild!=NULL)
{
t = GoFarLeft(t->rchild,s);
}
//visit the stack top element
else if(!s.empty())
{
t = s.top();
s.pop();
}
//if rchild is null&&stack is empty
else
{
t = NULL;
}
}
}
int main()
{
BiTree T;
cout<
주: 비귀속은 c++ 창고 용기에 사용되며, 배우지 못하면 창고 프로그램을 직접 작성할 수도 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
예제 1.15 UVALive-3902 트리의 검색컨베이어 도어 제목 대의: n대의 기계는 하나의 트리 네트워크로 연결되어 잎 노드는 클라이언트이고 다른 노드는 서버이다. 처음에는 한 대의 서버만 하나의 서비스를 제공했지만 k의 거리 내의 클라이언트만 덮어쓸 수 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.