데이터 구조 - 후 순서 단서 화 이 진 트 리
2959 단어 데이터 구조
#include
using namespace std;
typedef enum PointerTag {Link,Thread}; //Link==0,Thread==1;
typedef struct treenode
{
struct treenode *left;
char data;
struct treenode *right;
PointerTag Ltag,Rtag; //
}Treenode,* Treep;
Treep pre; /* , */
//
void init_tree(Treep &root)
{
root=NULL;
cout<data=ch;
rt->Ltag=Link;
rt->Rtag=Link;
creat_tree(rt->left); //
creat_tree(rt->right); //
}
}
//
void pre_order(Treep &rt)
{
if(rt!=NULL)
{
cout<data<left);
pre_order(rt->right);
}
}
//
void backThreading(Treep &p)
{
if(p)
{
backThreading(p->left);
backThreading(p->right);
if(!p->left)
{
p->Ltag=Thread;
p->left=pre; //
}
if(!pre->right)
{
pre->Rtag=Thread;
pre->right=p; //
}
pre=p;
}
}//InThreading
Treep backorderThreading(Treep &rt)
{
Treep thrt;
if( !(thrt = (Treep) malloc (sizeof(Treenode) ) ) )
exit(1);
thrt->Ltag=Link;
thrt->Rtag=Thread; //
thrt->right=thrt; //
if(!rt)
thrt->left=thrt; // ,
else
{
thrt->left=rt;
pre=thrt;
backThreading(rt); //
thrt->right=pre; //
}
return thrt;
}
Treep parent(Treep &thrt,Treep &p)
{
Treep temp;
temp=thrt;
if(temp->left==p)
return temp; //
else
{
temp=temp->left;
while( temp->left!=p && temp->right!=p )
{
if(Link==temp->Rtag)
temp=temp->right; // ,
else
temp=temp->left; // , , , ,
}
return temp;
}
}
//
void backorderTraver(Treep &thrt)
{
Treep p;
Treep par;
p=thrt->left;
while(1)
{
while(Link==p->Ltag)
p=p->left;
if(Link==p->Rtag)
p=p->right;
else
break; //p
}
while(p!=thrt)
{
cout<data<right || Thread==par->Rtag) //2. p , ,
p=par;
else
{
while(par->Rtag==Link) //3. p , 。
{
par=par->right;
while(par->Ltag==Link)
{
par=par->left;
}
}
p=par;
}
}
}
int main()
{
Treep root;
init_tree(root); //
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.