二叉树的遍历(栈遍历与递归遍历)-数据结构(15)

来源:互联网 发布:网络社群有哪些 编辑:程序博客网 时间:2024/05/22 14:39

一、树的先序遍历

参考书P128-P132,先序列遍历是,先访问根结点,先序遍历左子树,然后先序遍历右子树递归下去。


二、树的遍历实现

1、递归遍历

Status PreOederTraverse(BiTree T, Status(*Visit)(TElemType e)){//利用先序遍历 二叉树 对每个元素进行visit函数 //递归的形式if (T){Visit(T->data);PreOederTraverse(T->lchild, Visit);PreOederTraverse(T->rchild, Visit);}return OK;}

2、栈的遍历

这里要说明下思想,其实栈中进栈的都是还没有遍历右子树的的结点。
Status InOrderTraverse(BiTree T,Status (*Visit)(TElemType e)){//利用栈的形式先序遍历二叉树 非递归版本SqStack stack;//栈中可以理解为 结点中没有进右结点的就进栈InitStack(stack);BiTree p = T;while (p || !StackEmpty(stack)){if (p){//当前结点不为空的情况下 进入栈中 进入左树 Visit(p->data);Push(stack, p);p = p->lchild;}else{//当前结点是空的Pop(stack,p);p = p->rchild;}}return OK;}


三、执行

char * preStr = "ABC##DE#G##F###";//先序遍历字符串BiTree tree;CreateBiTree(tree,preStr);printf("\n先序遍历\n");PreOederTraverse(tree,PrintElement);//PrintTree_L(tree,0);printf("\n先序遍历\n");InOrderTraverse(tree, PrintElement);
输出:
先序遍历ABCDEGF先序遍历ABCDEGF请按任意键继续. . .



阅读全文
0 0