IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 二叉树的前序递归建立及其四种遍历方式(层序遍历完全手写树结点的链表和链式队列) -> 正文阅读

[数据结构与算法]二叉树的前序递归建立及其四种遍历方式(层序遍历完全手写树结点的链表和链式队列)

二叉树的前序递归建立,及其四种遍历方式(层序遍历完全手写树结点的链表和链式队列,没用stl里的queue)代码很规范

#include<iostream>
using namespace std;


struct ElemType
{
    int value;
};
typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild,*rchild;
    
}BiTNode,*BiTree;

//链式队列结点
typedef struct LinkNode
{
    BiTNode *b;             //存的是指针不是结点
    struct LinkNode *next;
}LinkNode;

typedef struct{
    LinkNode *front;
    LinkNode *rear;
}LinkQueue;


//按先序顺序输入二叉树的值
void CreateBiTree(BiTree &T,char a[],int &i){
    if(a[i]=='#'){
        T=NULL;
    }
    else{
        T=(BiTNode*)malloc(sizeof(BiTNode));
        T->data.value=a[i];
        
        CreateBiTree(T->lchild,a,++i);
        CreateBiTree(T->rchild,a,++i);
    }
    
}
void visit(BiTNode* &N){
    cout<<N->data.value<<" ";
}

//树的前序遍历
void PreOrder(BiTree T){
    if(T!=NULL){
        visit(T);
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}

//树的中续遍历
void InOrder(BiTree T){
    if(T!=NULL){
        PreOrder(T->lchild);
        visit(T);
        PreOrder(T->rchild);
    }
}
void PostOrder(BiTree T){
    if(T!=NULL){
        PreOrder(T->lchild);
        PreOrder(T->rchild);
        visit(T);
    }
}
//初始化辅助队列
void InitQueue(LinkQueue &Q){
    Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
    Q.front->next=NULL;
}
//入队操作
void EnQueue(LinkQueue &Q,BiTree x){
    LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
    p->b=x;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
}
//出队操作
bool DeQueue(LinkQueue &Q,BiTree &x){
    if(Q.front==Q.rear)
        return false;
    LinkNode *p=(LinkNode*)malloc(sizeof(LinkNode));
    p=Q.front->next;
    x=p->b;
    Q.front->next=p->next;
    if(Q.rear==p)
        Q.rear=Q.front;
    free(p);
    return true;
}

//判空操作
bool IsEmpty(LinkQueue Q){
    if(Q.front==Q.rear)
        return true;
    else
        return false;
}

//层序遍历
void levelOrder(BiTree T){
    LinkQueue Q;
    InitQueue(Q);
    BiTree p;
    EnQueue(Q,T);
    while(!IsEmpty(Q)){
        DeQueue(Q,p);
        visit(p);
        if(p->lchild!=NULL)
            EnQueue(Q,p->lchild);
        if(p->rchild!=NULL)
            EnQueue(Q,p->rchild);
    }
}


int main(){
    char a[]={4, 1, 0, '#', '#', 2, '#', 3, '#', '#', 7, 5, '#', 6, '#', '#', 8, '#', 9, '#', '#'};
    int i=0;
    BiTree T;
    CreateBiTree(T,a,i);
    cout<<"树的前序遍历为"<<endl;
    PreOrder(T);
    cout<<endl;
    cout<<"树的中序遍历为"<<endl;
    InOrder(T);
    cout<<endl;
    cout<<"树的后序遍历为"<<endl;
    PostOrder(T);
    cout<<endl;
    cout<<"树的层序遍历为"<<endl;
    levelOrder(T);

    system("pause");
    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:04:09  更:2021-09-11 19:06:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 11:50:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码