遍历二叉树: 指按某条搜索路径巡防树中每个结点,使得每个结点都被访问一次且仅为一次;
三种遍历情况:
- 先序遍历二叉树:DLR(先访问根结点,然后访问左子树,最后访问右子树);
递归算法
void inordertraverse(BiTree T)
{ //先序遍历二叉树T的递归算法
if(T) //若二叉树非空
{
cout<<T->data; //先访问根节点
inordertraverse(T->lchild); //在访问左子树
inordertraverse(T->rchild);
}
}
非递归算法
-
初始化一个空栈S,指针p指向根结点
-
申请一个结点空间q,用来存放栈顶弹出的元素;
-
当p非空或者栈S非空时,循环执行以下操作:
-
[? ] 如果p非空,则将p进栈,p指向该节点的根节点
-
[?] 如果p为空,则弹出栈顶元素并访问,将p指向该结点的右孩子;
void inordertraverse(BiTree T)
{
initstack(s); p=T;
q= new BiTNoede;
while(p||!StackEmpty(S))
{
if(p) //p非空
{
Push(S,p); //根指针进栈
cout<<p->data;//根指针进栈&#