——本节内容为Bilibili王道考研《数据结构》P50视频内容笔记。
目录
一、树的遍历
1.先根遍历
(1)定义:若树非空,先访问根结点,再依次对每棵子树进行先根遍历。
(2)伪代码:
void PreOrder(TreeNode *R)
{
if(R!=NULL)
{
visit(R); //访问根结点
while(R还有下一个子树T)
PreOrder(T); //先根遍历下一棵子树
}
}
(3)树的先根遍历序列与这棵树相应的二叉树先序序列相同。
(4)树的先根遍历也称深度优先遍历。
2.后根遍历
(1)定义:若树非空,先依次对每棵子树进行后根遍历,最后再访问根结点。
(2)伪代码:
void PostOrder(TreeNode* R)
{
if (R != NULL)
{
while (R还有下一棵子树T)
PostOrder(T); //后根遍历下一棵子树
visit(R); //访问根结点
}
}
(3)树的后根遍历序列与这棵树相应二叉树的中序序列相同。
(4)树的后根遍历也称深度优先遍历。
3.层次遍历(用队列实现)
(1)定义:
①若树非空,则根结点入队;
②若队列非空,则队头元素出队并访问,同时将该元素的孩子依次入队;
③重复②直到队列为空;
(2)层次遍历也称广度优先遍历;
(3)树的后根遍历序列与这棵树相应二叉树的中序序列相同。
二、森林的遍历
1.先序遍历
(1)定义:若森林为非空,则按如下规则进行遍历:
①访问森林中第一棵树的根结点;
②先序遍历第一棵树中根结点的子树森林;
③先序遍历除去第一棵树之后剩余的树构成的森林。
(2)效果等同于依次对各个树进行先根遍历。
2.中序遍历
(1)定义:若森林为非空,则按如下规则进行遍历:
①中序遍历森林中第一棵树的根结点的子树森林;
②访问第一棵树的根结点;
③中序遍历除去第一棵树之后剩余的树构成的森林。
(2)效果等同于依次对各个树进行后根遍历。