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.二叉树的高度

  • 相关阅读:
    360删除、修改注册表问题
    朗姆达表达式类似IN查询条件
    SQL 分组排序、CASE...WHEN...、是否为空 查询
    Excel 复制Sql查询结果错位
    redis实现购物车秒杀原理
    sphinx的使用
    linux安装
    linux和windows的区别
    Yii2.0实现语言包切换功能
    Linux的7个级别
  • 原文地址:https://www.cnblogs.com/littlepage/p/11216460.html
Copyright © 2011-2022 走看看