一、二叉树的前序遍历,写出一种非递归算法
二叉链表的结点类型为:
struct bnode { char data; struct bnode *lchild,*rchild; }; typedef struct bnode Bnode *Btree; //*Btree是一个指针类型标识符
前序遍历非递归算法:
void preorder (Btree t) { Bnode *s[M];//设栈的容量为M Bnode *p=t;int top=-1;//栈为空 while((top!=-1)||(p!=NULL)) if(p!=NULL)//p从根结点出发,若根不为空,打印根结点 { printf("%d",t->data); if(p->rchild!=NULL)//如果右子树不为空 s[++top]=p->rchild;//右子树入栈,栈顶指针加一 p=p->lchild;//右子树为空,则将左子树赋值到根结点处,判断根结点是否为空,不为空,打印根结点(即左子树) } else if(top!=-1) p=s[top--];//如果栈不为空,出栈,栈顶指针减一,栈顶将栈顶值放到根节点中,while循环后打印右子树 }
二 、未完待续
原文地址:https://www.cnblogs.com/javabai/p/10993109.html
时间: 2024-11-06 07:18:59