二叉树的创建与遍历

来源:互联网 发布:武力统一台湾后果知乎 编辑:程序博客网 时间:2024/06/08 02:05

1、定义二叉树

typedef struct node{    struct node *leftChild;    struct node *rightChild;    int data;}NODE, *PNODE;
2、创建节点

PNODE createNode(int i){    PNODE* q = new NODE;    q->leftChild = NULL;    q->rightChild = NULL;    q->data = i;    return q;}
3、创建二叉树

PNODE createBiTree(){    PNODE *p[N] = {NULL};    int i;    for(i = 0; i < N; i++)        p[i] = createNode(i + 1);    for(i = 0; i < N/2; i++)    {        p[i]->leftChild = p[i * 2 + 1];        p[i]->rightChild = p[i * 2 + 2];    }    return p[0];}
4、访问节点

int visit(PNODE T){    return T->data;}
5、先序遍历

void preOrderTraverse(PNODE T){    if(T)    {        cout << visit(T) << " ";        preOrderTraverse(T->leftChild);        preOrderTraverse(T->rightChild);    }}

6、中序遍历

void inOrderTraverse(PNODE T){    if(T)    {        inOrderTraverse(T->leftChild);        cout << visit(T) << " ";        inOrderTraverse(T->rightChild);    }}
7、后续遍历

void postOrderTraverse(PNODE T){    if(T)    {        postOrderTraverse(T->leftChild);        postOrderTraverse(T->rightChild);        cout << visit(T) << " ";    }}

8、main函数

int main(){    BiTree T = createBiTree();    cout << "先序遍历:" << endl;    preOrderTraverse(T);    cout << endl << endl;    cout << "中序遍历:" << endl;    inOrderTraverse(T);    cout << endl << endl;    cout << "后序遍历:" << endl;    postOrderTraverse(T);    cout << endl << endl;    return 0;}
9、测试结果






0 0