前序遍历算法思想:
- 判断该二叉树是否为空,若为空则退出遍历。
- 压NULL入栈。
- 访问根结点。
- 右孩子如果非空则进栈,否则不做任何事情。
- 如果左孩子非空,则进入左孩子,转到步骤3,否则出栈,转到步骤3。
伪代码:
stack S; //空栈S,
if root==NULL
return;
else
{
TreeNode *p;
p=root; //初始化
S.push(NULL); //压NULL进栈
while(p!=NULL)
{
visit(p);
if(p->right!=NULL) S.push(p->right); //右孩子进栈
if(p->left!=NULL)p=p->left;// 进入左孩子
else
S.pop(p);
}
}
中序遍历算法思想:
- 检查二叉树是否为空,if 空 退出,else 2
- 沿着做子树移动到左子树最底部,移动的过程中,依次进栈。
- 开始出栈,一个结点出栈后,进入该结点的右子树,继续执行,转到步骤2。
图广度优先搜索遍历思想:
- 建立一个标示数组,初始化为false。
- 创建一个队列,访问顶节点,并进队列。
- 依次访问顶节点的相邻节点,并进队列
- 出队列,转到第3步。
第2步和第3步可以通过一个嵌套的循环来实现。
while(!Q.empty())
{
出队列;
取得队首元素的第一个邻接点
while(邻接点存在)
{
如果标识位为false 访问节点
并进队列
获得下一个邻接点
}
}