二叉树三种遍历调试运行版

头文件:

#include <stdio.h>
struct BinaryTreeNode 
{
    int                    m_nValue; 
    BinaryTreeNode*        m_pLeft;  
    BinaryTreeNode*        m_pRight; 
};

先序输入建立:

void Create_BT(BinaryTreeNode *&bt)//先序输入二叉树
{
	int d;
	scanf("%d",&d);
	if(d==-1)bt=NULL;
	else 
	{
		bt=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
		bt->m_nValue=d;
		Create_BT(bt->m_pLeft);
		Create_BT(bt->m_pRight);
	}	
}

三种遍历方法:

void PreOrder(BinaryTreeNode *bt)
{
	if(bt!=NULL)
	{
		printf("%d\n",bt->m_nValue);
		PreOrder(bt->m_pLeft);
		PreOrder(bt->m_pRight);
	}
}
void InOrder(BinaryTreeNode *bt)
{
	if(bt!=NULL)
	{
		InOrder(bt->m_pLeft);
		printf("%d\n",bt->m_nValue);
		InOrder(bt->m_pRight);
	}
}
void PostOrder(BinaryTreeNode *bt)
{
	if(bt!=NULL)
	{
		PostOrder(bt->m_pLeft);
		PostOrder(bt->m_pRight);
		printf("%d\n",bt->m_nValue);
	}
}
void PreOrderStack(BinaryTreeNode *bt)
{
	BinaryTreeNode *s[20];//栈
	BinaryTreeNode *p=bt;
	int top=-1;
	while(p||top>-1)
	{
		while(p)
		{
			printf("%d\n",p->m_nValue);
			s[++top]=p;
			p=p->m_pLeft;
		}
		if(top>-1)
		{
			p=s[top];
			top--;
			p=p->m_pRight;
		}
	}
}
void InOrderStack(BinaryTreeNode *bt)
{
	BinaryTreeNode *s[20];//栈
	BinaryTreeNode *p=bt;
	int top=-1;
	while(p||top>-1)
	{
		while(p)
		{
			s[++top]=p;
			p=p->m_pLeft;
		}
		if(top>-1)
		{
			p=s[top];
			printf("%d\n",p->m_nValue);			
			top--;
			p=p->m_pRight;
		}
	}
}
//后序二叉树非递归
struct stacknode
{
	BinaryTreeNode *node;
	int tag;//tag=0表示左子女已访问,tag=1表示右子女已访问
};
void PostOrderStack(BinaryTreeNode *bt)
{
	stacknode s[20];//栈
	stacknode temp;//暂存结点信息
	BinaryTreeNode *p=bt;
	int top=-1;
	while(p||top>-1)
	{
		while(p)
		{
			temp.node=p;
			temp.tag=0;
			s[++top]=temp;
			p=p->m_pLeft;
		}
		while(top>-1&&s[top].tag==1)//右子树已访问
		{
			printf("%d\n",s[top--].node->m_nValue);
		}
		if(top>-1)
		{
			s[top].tag=1;
			p=s[top].node;
			p=p->m_pRight;
		}
	}
}

main函数:

int main()
{
	while(true)
	{
       BinaryTreeNode *bt;
	   Create_BT(bt);
	   PreOrderStack(bt);
	   InOrderStack(bt);
	   PostOrderStack(bt);
	   //PreOrder(bt);
	   //InOrder(bt);
	   //PostOrder(bt);
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/tgkx1054/p/2820601.html