이 진 트 리 우선 순위 옮 겨 다 니 기, 중간 순서 옮 겨 다 니 기, 뒤 순서 옮 겨 다 니 는 재 귀 알고리즘 과 비 재 귀 알고리즘
3827 단어 알고리즘 과 데이터 구조
typedef struct TNode *Position;
typedef Position BinTree; /* */
struct TNode{ /* */
int Data; /* */
BinTree Left; /* */
BinTree Right; /* */
};
재 귀 알고리즘
/***************** ******************/
/***** *****/
void PreOrderTraversal(BinTree BT)
{
if( BT ){
printf("%d ",BT->Data); //
PreOrderTraversal(BT->Left); //
PreOrderTraversal(BT->Right); //
}
}
/***** *****/
void InOrderTraversal(BinTree BT)
{
if( BT ){
InOrderTraversal(BT->Left);
printf("%d ",BT->Data);
InOrderTraversal(BT->Right);
}
}
/***** *****/
void PostOrderTraversal(BinTree BT)
{
if( BT ){
PostOrderTraversal(BT->Left);
PostOrderTraversal(BT->Right);
printf("%d ",BT->Data);
}
}
비 귀속 알고리즘
/***************** ******************/
/***** *****/
void PreOrderTraversal_(BinTree BT)
{
BinTree T = BT;
Stack S = CreatStack(MaxSize); /* S*/
while( T || !IsEmpty(S) ){
while( T ){ /* , */
printf("%5d ",T->Data); /* ( ) */
Push(S,T);
T = T->Left;
}
if( !IsEmpty(S) ){
T = Pop(S); /* */
T = T->Right; /* */
}
}
}
/***** *****/
void InOrderTraversal_(BinTree BT)
{
BinTree T = BT;
Stack S = CreatStack(MaxSize); /* S*/
while( T || !IsEmpty(S) ){
while( T ){ /* , */
Push(S,T);
T = T->Left;
}
if( !IsEmpty(S) ){
T = Pop(S); /* */
printf("%5d ",T->Data); /* ( ) */
T = T->Right; /* */
}
}
}
/***** *****/
/*1
(visit)
,
, 2
, 1, +1, ,T ( ),
, ,T ( ),
*/
void PostOrderTraversal_1(BinTree BT)
{
BinTree T,BT;
Stack S = CreatStack(Maxsize);
while( T || !IsEmpty(s)) {
while(T){
T->visit++;//visit 0
Push(S,T);
T = T->Left;
}
if( !isEmpty(S) ){
T = Pop(S);//
if(T->visit==2){
printf("%5d",T->data);
T = NULL;
}
else{
T->visit++;
Push(S,T);// 2,
T = T->Right;
}
}
}
}
/*2
root, left, right ,
root, right, left, “ ”。
left, right,root ,
“ ” .
*/
void PostOrderTraversal_2( BinTree BT )
{
BinTree T,BT;
Stack S = CreatStack( MaxSize ); /* S*/
Stack Q = CreatStack( MaxSize ); /* Q, */
while( T || !IsEmpty(S) ){
while(T){ /* */
Push(S,T);
Push(Q,T);/* , */
T = T->Right; /* */
}
if(!IsEmpty(S)){
T = Pop(S);
T = T->Left; /* */
}
}
while( !IsEmpty(Q) ){
T = Pop(Q);
printf("%5d ", T->Data);
}
}
/*3
, ,
,
, r
*/
void PostOrderTraversal_3(BinTree BT){
BinTree T = BT;
BinTree r = NULL;
Stack S = CreatStack(MaxSize);
while( T || !isEmpty(S) ){
if( T ){ //
Push(S, T);
T = T->left;
}
else{
GetTop(S,T); //
if(T->right && T->right != r)
T = T->right;
else{
T = Pop(S);
printf("%5d ", T->data);
r = T; //
T = NULL; // T
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 구조의 링크 의 실현글 목록 소개 실현 1. 프로필 동적 배열, 스 택 과 대열 의 바 텀 은 모두 정적 배열 에 의존 하고 resize 로 고정 용량 문 제 를 해결한다.그리고 링크 는 진정한 동적 데이터 구조 이다 2. 실현...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.