• 16 C++ 二叉树遍历 Binary tree traversal


    #define _CRT_SECURE_NO_WARNINGS //solve the scanf error problems
    #include “function.h”

    void preOrder(BiTree p) {
    if (p != NULL) {
    printf(“%c\t”, p->c);
    preOrder(p->lchild);
    preOrder(p->rchild);
    }
    }

    void inOrder(BiTree p) {
    if (p != NULL) {

    	inOrder(p->lchild);
    	printf("%c\t", p->c);
    	inOrder(p->rchild);
    }
    
    • 1
    • 2
    • 3
    • 4

    }

    void postOrder(BiTree p) {
    if (p != NULL) {

    	postOrder(p->lchild);
    	printf("%c\t", p->c);
    	postOrder(p->rchild);
    }
    
    • 1
    • 2
    • 3
    • 4

    }

    void InOredr2(BiTree T) {
    SqStack S;
    Init_stack(S); BiTree p = T;
    while (p || !Stack_empty(S)) {
    if § {
    Push(S, p);
    p = p->lchild;
    }
    else {
    Pop(S, p);
    printf(“%c\t”, p->c);
    p = p->rchild;
    }
    }
    }

    void LevelOrder(BiTree T) {
    LinkQueue Q;
    Init_queue(Q);
    BiTree p;
    EnQueue(Q,T);
    while (!Is_empty(Q)) {
    DeQueue(Q, p);
    putchar(p->c);
    if (p->lchild != NULL) {
    EnQueue(Q, p->lchild);
    }
    if (p->rchild != NULL) EnQueue(Q, p->rchild);
    }
    }

    //void InThread(BiTree& p, BiTree& pre) {
    // if (p != NULL) {
    // InThread(p->lchild, pre);
    // if (p->lchild == NULL) {
    // p->lchild = pre;
    // p->ltag = 1;
    // }
    // if (pre != NULL && pre->rchild == NULL) {
    // pre->rchild = p;
    // pre->rtag = 1;
    //
    // }
    // pre = p;
    // InThread(p->rchild, pre);
    // }
    //}

    int main() {
    BiTree pnew;
    int i, j, pos;
    char c;
    BiTree tree = NULL;
    ptag_t phead = NULL, ptail = NULL, listpnew, pcur=NULL;
    while (scanf(“%c”, &c) != EOF) {
    if (c==‘\n’) break;
    pnew = (BiTree)calloc(1, sizeof(BiTNode));
    pnew->c = c;
    listpnew = (ptag_t)calloc(1, sizeof(tag_t));
    listpnew->p = pnew;
    if (tree == NULL) {
    tree = pnew;
    phead = listpnew;
    ptail = listpnew;
    pcur = listpnew;
    continue;
    }
    else {
    ptail->pnext = listpnew;
    ptail = listpnew;
    }
    if (pcur->p->lchild == NULL) {
    pcur->p->lchild = pnew;
    }
    else if (pcur->p->rchild == NULL) {
    pcur->p->rchild = pnew;
    pcur = pcur->pnext;
    }
    }
    printf(“Preorder traversal\n”);
    preOrder(tree);
    printf(“Mesoorder traversal\n”);
    inOrder(tree);
    printf(“Posterior order traversal\n”);
    postOrder(tree);
    printf(“Mesoorder traversal2\n”);
    InOredr2(tree);
    printf(“Hierarchical traversal\n”);
    LevelOrder(tree);

    }

  • 相关阅读:
    打开时空隧道,重演云栖72小时云世界
    MyBatis ---- 动态SQL
    毕业设计 stm32单片机的家庭成员监控监护系统 - 物联网 嵌入式
    【生成模型】Diffusion Models:概率扩散模型
    突然想分析下房贷利率及利息计算
    基于Java+SpringBoot+Vue物流管理小程序系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
    rv1126之isp黑电平(BLC)校准!
    渐进式JavaScript框架---Vue.js
    时间复杂度
    软件设计模式系列之十二——外观模式
  • 原文地址:https://blog.csdn.net/weixin_44498127/article/details/125901720