树、森林的遍历
树、森林的遍历
树的先根遍历
//树的先根遍历 void PreOrder(TreeNode *R){ if(R!=NULL){ visit(R);//访问根节点 while(R还有下一个子树T){ PreOrder(T); } } }
将上述的树转换为二叉树
树的先根遍历序列与这棵树相应的二叉树的先序遍历序列相同
树的后根遍历
//树的后根遍历 void PostOrder(TreeNode *R){ if(R!=NULL){ while(R还有下一个子树T){ PostOrder(T); } visit(R);//访问根节点 } }
将上述树转换为二叉树
树的后根遍历序列与这棵树相应二叉树的中序遍历序列相同
树的层次遍历
可以称为:广度优先遍历
需要用到辅助队列来实现。
- 若树非空,则根节点入队
- 若队列非空,队头元素出对并访问,同时将该元素的孩子一次入队
- 重复2直到队列位空
先根和后根遍历可以称为:深度优先遍历
森林的先序遍历
若森林非空,则按如下规则进行遍历:
- 访问森林中第一棵树的根节点
- 先序遍历第一棵树中根节点的子树森林。
- 先序遍历除去第一棵树之后剩余的树构成的森林
效果等同于依次对各个树进行先根遍历
效果等同于依次对二叉树的先序遍历
森林的中序遍历
若森林非空,则按如下规则进行遍历:
- 中序遍历森林中第一颗树的根节点的子树森林。
- 访问第一棵树的根节点。
- 中序遍历除去第一棵树之后剩余的树构成的森林。
效果等同于依次对各个树的后根遍历
效果等同于依次对二叉树的中序遍历
本文作者:Jev_0987
本文链接:https://www.cnblogs.com/jev-0987/p/13202205.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步