stack先序遍历.c

来自「编写程序」· C语言 代码 · 共 81 行

C
81
字号
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef char DataType;
#include "BiTree.h"
#include "BiTreeTraverse.h"

typedef BiTreeNode SDataType;
#include "LinStack.h"

void PrintData(DataType item)
{	
	printf("%c ",item);
}

void StackOrder(BiTreeNode *t,LSNode *s,void Visit(DataType item))
{	
	BiTreeNode ttemp;
	int count=0;
	
	StackPush(s,*t);
	count++;
	
	do
	{	
		StackPop(s,&ttemp);
		Visit(ttemp.data);
		count--;
		
		if(ttemp.rightChild!=NULL)
		{	
			StackPush(s,*ttemp.rightChild);
			count++;
		}
		if(ttemp.leftChild!=NULL)
		{	
			StackPush(s,*ttemp.leftChild);
			count++;
		}
	} while(count>0);
}

void main(void)
{	
	BiTreeNode *tree,*p,*pp;
	LSNode *stack;
	
	StackInitiate(&stack);
	BiTreeInitiate(&tree);
	
	printf("本题算法结果\n ");

/*创建课本P165图7-10(b)结构的树*/
	p=InsertLeftNode(tree,'A');
	p=InsertLeftNode(p,'B');
	p=InsertLeftNode(p,'D');
	p=InsertRightNode(p,'G');
	p=InsertRightNode(tree->leftChild,'C');
	pp=p;
	InsertLeftNode(p,'E');
	InsertRightNode(pp,'F');

	PrintBiTree(tree,0);

	printf("堆栈遍历结果\n ");
	StackOrder(tree->leftChild,stack,PrintData); //创建的树附带头节点
	
	printf("\n先序遍历结果 ");	
	PreOrder(tree->leftChild,PrintData);  //采用递归算法的先序遍历运算对比结果
	
	printf("\n中序遍历结果 ");	
	InOrder(tree->leftChild,PrintData);  //递归中序遍历
	
	printf("\n后序遍历结果 ");	
	PostOrder(tree->leftChild,PrintData);  //递归后序遍历
	
	BiTreeDestroy(&tree);
	StackDestroy(&stack);
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?