C語言 二叉樹順序存儲結構的先序遍歷算法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define __MAX_LENGTH__ 20

typedef struct SqStack{//調用棧
    int data[__MAX_LENGTH__];
    int top;
}SqStack;

typedef struct SqBiTree{//順序存儲二叉樹
    elemType data[__MAX_LENGTH__];
    int len;
}SqBiTree;

//按先序遍歷一維數組作爲存儲結構的二叉樹
int traTree(SqBiTree *t){

    SqStack *stack = calloc(sizeof(SqStack),1);
    stack->top = 0;//將棧制空;
    int root;
    root = 0;//指向根節點;
    while((stack->top)>-1){//當棧不爲空時,進入循環
        while(root<__MAX_LENGTH__&&t->data[root]>='a'){//

            printf("%c,",t->data[root]);//訪問節點
            stack->data[stack->top] = root;//節點入棧
            stack->top ++;
            root = (root+1) * 2-1;//檢查下一個左子樹;
        }
        if(stack->top >-1){//棧非空訪問,遍歷右子樹;
            stack->top --;
            root = (stack->data[stack->top]+1)*2;
        }
    }
}

int main(int argc, char *argv[])
{
    SqBiTree *p = calloc(sizeof(SqBiTree),1);
    strcpy(p->data,"abcdefghij");
    traTree(p);
    return 0;
}

wKiom1m3pGyhHY08AABTcaKN8oE984.png-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章