二叉树的遍历操作

来源:互联网 发布:java ocr身份证识别 编辑:程序博客网 时间:2024/04/25 03:54
  **这几天在数据结构当中的二叉树的基本操作,发现了好多难点知识,例如二叉树的遍历里操作有先序、中序和后序之分  还有许多基本概念,树的子树,节点有根节点,叶子节点等,树的深度.....  今天练习一下二叉树的遍历操作的算法。  先看先序遍历

这里第利用先序遍历来建立一个二叉树存储结构

   Status CreateBiTree(BinTree &bt) {    //ABC@@DE@G@@F@@@    char ch;    scanf_s("%c",&ch);    if (ch == '@')        bt = NULL;    else    {        bt = (BinTNode*)malloc(sizeof(BinTree));        bt->data = ch;        CreateBiTree(bt->lchild);   //递归建立左子树        CreateBiTree(bt->rchild);   //递归建立右子树    }    return OK;} 

中序遍历操作利用了前面学过基本的数据结构的栈的操作

//二叉树中序遍历非递归算法Status Inorder(BinTree bt) {    BinTNode *stack[num];   //定义数组栈    int top = 0;      //初始化栈    stack[top] = bt;    do {        while (NULL!=stack[top])        {            //扫描所有的根节点及其所有的左节点并入栈            top = top + 1;            stack[top] = stack[top - 1]->lchild;        }        top = top - 1;        if (top >= 0) {            printf("%c", stack[top]->data);            stack[top] = stack[top]->rchild;        }    } while (top >= 0);        return OK;}
//二叉树的递归中序遍历算法Status Inorder(BinTree bt){   if(bt!=NUll)   {     Inorder(bt->lchild);     printf("%5c",bt->data);     Inoorder(bt->rchild);   }   return OK;} 
//二叉树后序遍历递归算法Status PostOrder(BinTree bt) {    if(bt !=NULL)    {        PostOrder(bt->lchild);        PostOrder(bt->rchild);        printf("%5c",bt->data);    }    return OK;}

今天先写这么多了,有错误的地方请见谅,多多指点。。。。。。

1 0