二叉树的遍历、创建与操作
一、非递归遍历方法
在树的遍历中,非递归过程通常使用栈来实现,下面介绍三种常见的非递归遍历方法。
1. 前序遍历(Pre-order Traversal)
前序遍历的步骤如下:
1. 初始时,指针 ptr
指向根节点。
2. 将根节点的地址压入栈中。
3. 从栈中弹出一个地址。
4. 如果弹出的地址不为空:
- 访问该节点。
- 将该节点的右子节点压入栈中。
- 将该节点的左子节点压入栈中。
5. 重复上述步骤,直到栈为空。
以下是前序遍历的非递归函数代码:
nonrec_preorder(struct node *ptr)
{
stack[++top]=ptr;
while(top!=-1)
{
ptr=stack[top--];
if(ptr!=NULL)
{
printf(“%d”, ptr->info);
stack[++top]=ptr->right;
stack[++top]=ptr->left;
}
}
}
例如,对于二叉树:
A
E
D
F
C
H
B
G
I
初始时 ptr =