遍历二叉树的递归与非递归算法

来源:互联网 发布:大数据测试工程师 编辑:程序博客网 时间:2024/05/16 01:19

采用链式存储结构

typedef struct BiTNode{    TElemType data;//结点数据域    struct BiTNode *lchild,*rchild;//左右孩子指针}BiTNode,*BiTree;

中序遍历二叉树T的递归算法

void InOrderTraverse(BiTree T){    if(T)    {        InOrderTraverse(T->lchild);cout<<T->data;        InOrderTraverse(T->rchild);    }}

中序遍历的非递归算法

算法思想:

设S为一个栈,p为指向根节点的指针。

(1)当p非空时,将p所指向的结点的地址进栈,p指向该结点的左孩子;

(2)当p为空时,弹出栈顶元素并访问,将p指向该结点的右孩子;

(3)重复前两步,直到栈空且p也为空.

void InOrderTraverse(BiTree T){    //中序遍历二叉树T的非递归算法    InitStack(S);p=T;    q=new BiTNode;    while(p||!StackEmpty(S))    {        if(p)//p非空跟指针进栈,遍历左子树        {            Push(S,p);            p=p->lchild;         }  else//p为空指针退栈,访问根结点,遍历右子树         {      Pop(S,q);      cout<<q->data;             p=q->rchild;  }     }}

0 0
原创粉丝点击