目录
下一篇: 二叉排序树
一、树的先根遍历
若树非空,先访问根结点,再依次对每棵子树进行先根遍历
伪代码描述
void PreOrder(TreeNode *R)
{
if(R!=NULL){
visit(R);
while(R还有下一个子树T)
PreOrder(T);
}
}
其实与这棵树对应的二叉树的先序序列相同
二、树的后根遍历(深度优先遍历)
void PreOrder(TreeNode *R)
{
if(R!=NULL){
while(R还有下一个子树T)
PreOrder(T);
visit(R);
}
}
与对应二叉树的中序遍历相同
三、树的层次遍历(广度优先遍历)
1、若树非空,则根结点入队
2、若队列非空,队头元素出队并访问,同时将该元素的孩子依次入队
3、重复2直到队列为空
四、森林的遍历
1、先序遍历森林
若森林非空,则按如下规则进行遍历
访问森林中第一棵的根结点
先序遍历第一棵树中根结点的子树森林
先序遍历除去第一棵树之后剩余的树构成的森林
效果等同于依次对各个树进行先根遍历
也可以层次栈开展开
还可以把森林转化为二叉树,在先序遍历
2、中序遍历(这么叫是因为对标二叉树的中序遍历)
若森林非空则如下遍历
中序遍历森林中第一棵树的根结点的子树森林
访问第一棵树的根结点
中序遍历除去第一棵树之后剩余的树构成的森林
等同于各个子树执行后根遍历