博客
关于我
二叉树之先序遍历
阅读量:424 次
发布时间:2019-03-06

本文共 1410 字,大约阅读时间需要 4 分钟。

二叉树与线性结构的区别

二叉树与列表、链表、栈、队列等线性结构不同,它属于半线性结构。与其它结构不同之处在于,二叉树的节点除了链接到前后两个方向外,还具有左右子树的属性。

关于二叉树的遍历方式,我们通常会提到先序遍历、中序遍历和后序遍历三种方式。其中,先序遍历(Pre-order Traversal)只需掌握即可。

先序遍历的定义是:访问当前节点,然后按顺序访问其左子树和右子树。也就是说,只需访问根节点,左子树和右子树的顺序无关紧要。

先序遍历的递归实现方法

递归实现先序遍历的代码如下:

template
void traverse(BinNodePosi
x, VST &visit) { if (!x) return; visit(x->data); traverse(x->lChild, visit); traverse(x->rChild, visit);}

这个实现方法简单直观,递归地访问每个节点的左子树和右子树。

先序遍历的迭代实现方法(栈)一

迭代实现先序遍历的代码如下:

template
void traverse(BinNodePosi
x, VST &visit) { stack
> S; if (x) S.push(x); while (!S.empty()) { x = S.top(); S.pop(); visit(x->data); if (hasRchild(x)) S.push(x->rChild); if (hasLchild(x)) S.push(x->lChild); }}

这个实现方法使用一个辅助栈来模拟递归过程。具体做法是将根节点入栈后,逐步弹出栈顶节点,访问后将右子树入栈,然后再将左子树入栈。

先序遍历的迭代实现方法(栈)二

另一种迭代实现方法的代码如下:

template
void visitAlongLeftBranch(BinNodePosi
x, VST &visit, stack
> &S) { while (x) { visit(x->data); S.push(x->lChild); x = x->rChild; }}template
void traverse(BinNodePosi
x, VST &visit) { stack
> S; while (true) { visitAlongLeftBranch(x, visit, S); if (S.empty()) break; x = S.top(); S.pop(); }}

这种实现方法通过将右子树作为单位来逐批访问节点。具体做法是先访问左子树,右子树作为单位入栈处理。

在实际应用中,可以根据具体需求选择使用哪种迭代实现方法。理解这些实现方法有助于更好地掌握二叉树的遍历算法。

转载地址:http://vzbuz.baihongyu.com/

你可能感兴趣的文章
Openlayers实战:加载GeoJSON
查看>>
Openlayers实战:加载SHP文件
查看>>
Openlayers实战:界面控制综合演示
查看>>
Openlayers实战:绘制图形,导出geojson文件
查看>>
Openlayers实战:绘制图形,导出KML文件
查看>>
Openlayers实战:绘制多边形,导出CSV文件
查看>>
Openlayers实战:绘制带箭头的线
查看>>
Openlayers实战:绘制矩形,正方形,正六边形
查看>>
Openlayers实战:自定义放大缩小,显示zoom等级
查看>>
Openlayers实战:自定义版权属性信息
查看>>
Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
查看>>
Openlayers实战:选择feature,列表滑动,定位到相应的列表位置
查看>>
Openlayers实战:非4326,3857的投影
查看>>
Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
查看>>
Openlayers高级交互(12/20):利用高德逆地理编码,点击位置,显示坐标和地址
查看>>
Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
查看>>
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>