数据结构笔记——树、森林的遍历

目录

一、树的逻辑结构

二、树的先根遍历

三、树的后根遍历

四、树的层次遍历

五、森林的先序遍历

六、森林的中序遍历

七、总结

一、树的逻辑结构

树是n个结点的有限集合,n=0时,称为空树。在任意一棵非空树中应满足:

1)有且仅有一个特定的称为的结点。

2)当n>1时,其余结点可分为m个互不相交的有限集合T1,T2...Tm,其中每个集合本身又是一棵树,并且称为根节点的子树。

数据结构笔记——树、森林的遍历_第1张图片

二、树的先根遍历

先根遍历:若树非空,先访问根节点,再依次对每棵子树进行先根遍历。(深度优先遍历)

void PreOrder(TreeNode *R){
    if(R != NULL){
        visit(R);
        while(R还有下一个子树T)
            PreOrder(T);
    }
}

数据结构笔记——树、森林的遍历_第2张图片数据结构笔记——树、森林的遍历_第3张图片

先根遍历序列: A B E K F C G D H I J

注:树的先根遍历序列与这棵树相应二叉树的先序序列相同。

三、树的后根遍历

后根遍历:若树非空,先依次对每棵子树进行后根遍历,最后再访问根节点。

void PostOrder(TreeNode *R){
    if(R != NULL){
        while(R还有下一个子树T)
            PostOrder(T);
        visit(R);
    }
}

后根遍历序列:K E F B G C H I J D A

注:树的后根遍历序列与这棵树相应二叉树的中序序列相同。

四、树的层次遍历

层次遍历(用队列实现)

①若树非空,则根节点入队

②若队列非空,队头元素出队并访问,同时将该元素的孩子依次入队

③重复②直到队列为空

数据结构笔记——树、森林的遍历_第4张图片

五、森林的先序遍历

森林:森林是m棵互不相交的树的集合。每棵树去掉根节点后,其各个子树又组成森林。

先序遍历森林:

访问森林中第一棵树的根节点。

先序遍历第一棵树中根节点的子树森林。

先序遍历除去第一棵树之后剩余的树构成的森林。

数据结构笔记——树、森林的遍历_第5张图片

森林先序遍历序列:B E K L F C G D H M I J

效果等同于依次对各个树进行先根遍历

数据结构笔记——树、森林的遍历_第6张图片

先序遍历序列:B E K L F C G D H M I J

效果等同于依次对二叉树的先序遍历

六、森林的中序遍历

中序遍历森林:

中序遍历森林中第一棵树的根节点的子树森林。

访问第一棵树的根节点。

中序遍历除去第一棵树之后剩余的树构成的森林。

数据结构笔记——树、森林的遍历_第7张图片

森林中序遍历序列:K L E F B G C M H I J D

效果等同于依次对各个树进行后根遍历

数据结构笔记——树、森林的遍历_第8张图片

中序遍历序列:K L E F B G C M H I J D

效果等同于依次对二叉树的中序遍历

七、总结

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