递归 | 迭代 | |
中序遍历 | О(n) | О(n) |
Postorder | О(n) |
中序遍历
递归
if ( !x )
return; //处理递归基
traverse( x->lChild, visit ); //遍历左子树
visit( x->data); //访问根节点
traverse( x->rChild, visit ); //遍历右子树
迭代
- 控制权转交给左孩子;图中的被发现状态和visited状态
- 访问左侧链节点,遍历右子树; 左式堆
- 逆序性:最先被访问的是最后被发现的,自下而上;采用后进先出的结构:栈。
- 分摊分析
后序遍历
递归
if ( !x )
return;
traverse( x->lChild, visit );
traverse( x->rChild, visit );
visit( x->data );
层次遍历
迭代
while ( ! Q.empty() ){
BinNodePosi(T) x = Q.dequeue();
visit( x->data );
if ( HasLChild( * x ) )
Q.enquene( x->lc );
if ( HasLChild( * x ) )
Q.enquene( x->rc );
}