(借助栈)二叉树中序非递归遍历

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct treeNode
{
	int data;
	struct treeNode* rChild;
	struct treeNode* lChild;
}tree, *BinTree;

typedef struct 
{
	tree Tree[30];
	int top;
}stack;

int creatTree(BinTree& pNode)
{
	int ch;
	scanf("%d", &ch);
	if (ch == 0)
	{
		pNode = NULL;
	}
	else
	{
		pNode = (BinTree)malloc(sizeof(tree));
		pNode->data = ch;
		creatTree(pNode->lChild);
		creatTree(pNode->rChild);
		return 0;
	}
}

void initStack(stack& s)
{
	s.top = 0;
}


void push(stack& p, BinTree pNode)
{
	p.Tree[p.top] = *pNode;
	p.top++;
}

BinTree pop(stack& p)
{
	BinTree temp = &p.Tree[p.top];
	p.top--;
	return temp;
}

bool isEmpty(stack p)
{
	if (p.top == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

void inOrderTravelTree(BinTree p1,stack s)
{
	initStack(s);
	while (p1 || !isEmpty(s))
	{
		while (p1 != NULL)
		{
			push(s, p1);
			p1 = p1->lChild;
		}
		if (!isEmpty(s))
		{
			printf("%d", pop(s)->data);
			p1 = pop(s)->rChild;
		}
	}
}

int main()
{
	stack s;
	BinTree pHead=NULL;
	creatTree(pHead);
	inOrderTravelTree(pHead,s);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值