数据结构笔记——二叉树先/中/后序遍历

目录

一、什么是遍历

二、二叉树的遍历(手写练习)

三、先序遍历(代码)

四、中序遍历(代码)

五、后序遍历(代码)

六、求先序遍历序列

七、求中序遍历序列

八、求后序遍历序列

九、求树的深度(应用)

十、总结


一、什么是遍历

遍历:按照某种次序把所有结点都访问一遍

数据结构笔记——二叉树先/中/后序遍历_第1张图片

数据结构笔记——二叉树先/中/后序遍历_第2张图片

二、二叉树的遍历(手写练习)

二叉树的递归特性:

①要么是个空二叉树

②要么就是由“根节点+左子树+右子树”组成的二叉树

数据结构笔记——二叉树先/中/后序遍历_第3张图片

先序遍历:根左右(NLR)

中序遍历:左根右(LNR)

后序遍历:左右根(LRN)

数据结构笔记——二叉树先/中/后序遍历_第4张图片

数据结构笔记——二叉树先/中/后序遍历_第5张图片

数据结构笔记——二叉树先/中/后序遍历_第6张图片

三、先序遍历(代码)

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

数据结构笔记——二叉树先/中/后序遍历_第7张图片

void PreOrder(BiTree T){
    if(T != NULL){
        visit(T);
        PreOrder(T->lchild);
        PreOrder(T->rchild);
    }
}

时间复杂度O(h + 1),空间复杂度O(h)

四、中序遍历(代码)

数据结构笔记——二叉树先/中/后序遍历_第8张图片

void PreOrder(BiTree T){
    if(T != NULL){
        PreOrder(T->lchild);    //递归遍历左子树
        visit(T);        //访问根节点
        PreOrder(T->rchild);        //递归遍历右子树
    }
}

五、后序遍历(代码)

数据结构笔记——二叉树先/中/后序遍历_第9张图片

void PreOrder(BiTree T){
    if(T != NULL){
        PreOrder(T->lchild);    //递归遍历左子树
        PreOrder(T->rchild);        //递归遍历右子树
        visit(T);        //访问根节点
    }
}

六、求先序遍历序列

数据结构笔记——二叉树先/中/后序遍历_第10张图片

每个结点都会被路过3次

七、求中序遍历序列

数据结构笔记——二叉树先/中/后序遍历_第11张图片

数据结构笔记——二叉树先/中/后序遍历_第12张图片

数据结构笔记——二叉树先/中/后序遍历_第13张图片

八、求后序遍历序列

数据结构笔记——二叉树先/中/后序遍历_第14张图片

数据结构笔记——二叉树先/中/后序遍历_第15张图片

九、求树的深度(应用)

数据结构笔记——二叉树先/中/后序遍历_第16张图片

数据结构笔记——二叉树先/中/后序遍历_第17张图片

十、总结

数据结构笔记——二叉树先/中/后序遍历_第18张图片

你可能感兴趣的:(考研数据结构)