3.4之二叉树详解

#include<iostream>

using namespace std;

typedef struct node

{

    struct node *lchild;             //创建二叉树,分别表示左右两个节点

    struct node *rchild;

    char data;

}BiTreeNode, *BiTree;

void createBiTree(BiTree &T)

{ char c;

    cin >> c;

    if('#' == c)           

        T = NULL;            //‘’#‘’表示二叉树不存在的节点

    else

    {

        T = new BiTreeNode;

        T->data=c;

        createBiTree(T->lchild);

        createBiTree(T->rchild);         //输入的值分别赋值给左右两个节点(递归创建左右子树)

    }

}

void preTraverse(BiTree T)

{

    if(T)

    {

        cout<<T->data<<" ";                    //前序遍历,因为前面创建时候说明‘#’为空,所以先从首个结点判断,显示数值,依次判断左右子树,两边判断完回到结点并记录,若有子树则向下继续判断。

        preTraverse(T->lchild);                 若无子树,则返回上一层。直到所有结点遍历一遍结束。

        preTraverse(T->rchild);

    }

}

void midTraverse(BiTree T)

{

    if(T)

    {

        midTraverse(T->lchild);            //中序遍历:先在节点向左子树判断,有则继续向下,若无则返回,并记录数值。回到上一层结点记录数值,再判断右子树,直至所有结点遍历一遍结束

        cout<<T->data<<" ";

        midTraverse(T->rchild);

    }

}

void postTraverse(BiTree T)

{

    if(T)

    {

        postTraverse(T->lchild);            //后序遍历:先在节点向左子树判断,有则继续向下,若无则返回,向右继续判断。无右子树则继续返回上一层,重复遍历,直到遍历至首结点结束

        postTraverse(T->rchild);

        cout<<T->data<<" ";

    }

}

int main()

{

    BiTree T;                           

    createBiTree(T);

    cout<<"二叉树创建完成!"<<endl;

    cout<<"前序遍历二叉树:"<<endl;

    preTraverse(T);

    cout<<endl;

    cout<<"中序遍历二叉树:"<<endl;

    midTraverse(T);

    cout<<endl;

    cout<<"后序遍历二叉树:"<<endl;

    postTraverse(T);

    return 0;

}

猜你喜欢

转载自www.cnblogs.com/katycat/p/10468658.html