zoukankan      html  css  js  c++  java
  • 数据结构(中)树

    一、二叉树

    存储:

    1.线性存储

    2.链式存储

     遍历:

    1.先序遍历

    2.中序遍历

    3.后序遍历

     

    4.先序遍历堆栈(转自https://blog.csdn.net/weixin_37983220/article/details/84109033 )

    void PreOrderTraversal(BinTree BT)
    {
    BinTree T = BT;
    Stack S = (Stack)malloc(sizeof(SNode));
    S->Top = -1;
    while (T || !IsEmpty(S))
    {
    while (T)    //一直向左,并将沿途节点压入堆栈
    {
    Push(S, T);
    printf("%C", T->Data);
    T = T->Left;
    }
    if (!IsEmpty(S))
    {
    T = Pop(S);
    T = T->Right;
    }
    }
    free(S);
    }

    5.中序遍历堆栈

    void InOrderTraversal(BinTree BT)
    {
    BinTree T = BT;
    Stack S = (Stack)malloc(sizeof(SNode));
    S->Top = -1;
    while (T || !IsEmpty(S))
    {
    while (T)    //一直向左,并将沿途节点压入堆栈
    {
    Push(S, T);
    T = T->Left;
    }
    if (!IsEmpty(S))
    {
    T = Pop(S);
    printf("%C", T->Data);
    T = T->Right; 
    }
    }
    free(S);
    }

    6.后序遍历堆栈

    void PostOrderTraversal(BinTree BT)
    {
    BinTree T = BT;
    Stack S = (Stack)malloc(sizeof(SNode));
    
    Stack OutPut = (Stack)malloc(sizeof(SNode));
    S->Top = -1;
    OutPut->Top = -1;
    while (T || !IsEmpty(S))
    {
    while (T)    //一直向左,并将沿途节点压入堆栈
    {
    Push(S, T);
    Push(OutPut, T);
    T = T->Right;
    }
    if (!IsEmpty(S))
    {
    T = Pop(S);
    T = T->Left;
    }
    }
    while (OutPut->Top != -1)
    {
    printf("%c", Pop(OutPut)->Data);
    }
    free(S);
    free(OutPut);
    }

    7.层次遍历输出

    8.层序遍历输出叶子节点

    9.二叉树的高度

  • 相关阅读:
    Linux下利用rsync实现多服务器文件同步
    SVN使用import导入新数据到版本库
    SVN协同开发时服务端与线上APACHE测试环境网站同步记录 转
    [转]rsync的配置与应用
    Matrix 旋转mc 注册点在mc的左上角
    多边形面积计算
    【神奇的代码】
    【碰撞回弹】
    三角函数
    判断点是否在线段或直线上
  • 原文地址:https://www.cnblogs.com/littlepage/p/11216460.html
Copyright © 2011-2022 走看看