码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的遍历实现

时间:2017-05-05 18:34:15      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:printf   算法   树的遍历   article   遍历二叉树   maxsize   max   后序   name   

二叉树的先序遍历
//先序遍历二叉树的递归实现
void PreOrderTraverse(BiTree T)
{
	if(T)
	{
		printf("%2c",T->data);//訪问根结点
		PreOrderTraverse(T->lchild);//先序遍历左子树
        PreOrderTraverse(T->rchild);//先序遍历右子树
	}
}
//二叉树的先序遍历非递归算法
void PreOrderTraverse(BiTree T)
{
	BiTree stack[MAXSIZE];//定义一个栈。用于存放结点的指针
	int top;//定义栈顶指针
	BitNode *p;//定义一个结点的指针
	top=0;//初始化栈
	p=T;
	while(p!=NULL||top>0)
	{
		while(p!=NULL)//假设p不空。訪问根结点。遍历左子树
		{
           printf("%2c",T->data);//訪问根结点
		   stack[top++]=p;//将p入栈
		   p=p->lchild;//遍历左子树
		}
		if(top>0)//假设栈不空
		{
			p=stack[--top];//栈顶元素出栈
			p=p->rchild;//遍历右子树
		}
	}
}

二叉树的中序遍历

//中序遍历二叉树的递归实现
void PreOrderTraverse(BiTree T)
{
	if(T)
	{
		PreOrderTraverse(T->lchild);//中序遍历左子树
        printf("%2c",T->data);//訪问根结点
        PreOrderTraverse(T->rchild);//中序遍历右子树
	}
}
//二叉树的中序遍历非递归算法
void PreOrderTraverse(BiTree T)
{
	BiTree stack[MAXSIZE];//定义一个栈,用于存放结点的指针
	int top;//定义栈顶指针
	BitNode *p;//定义一个结点的指针
	top=0;//初始化栈
	p=T;
	while(p!=NULL||top>0)
	{
		while(p!=NULL)//假设p不空,訪问根结点,遍历左子树
		{
		   stack[top++]=p;//将p入栈
		   p=p->lchild;//遍历左子树
		}
		if(top>0)//假设栈不空
		{
			p=stack[--top];//栈顶元素出栈
            printf("%2c",T->data);//訪问根结点
			p=p->rchild;//遍历右子树
		}
	}
}

二叉树的后序遍历

//后序遍历二叉树的递归实现
void PreOrderTraverse(BiTree T)
{
	if(T)
	{
		PreOrderTraverse(T->lchild);//后序遍历左子树
        PreOrderTraverse(T->rchild);//后序遍历右子树
        printf("%2c",T->data);//訪问根结点
        
	}
}
//二叉树的后序遍历非递归算法
void PreOrderTraverse(BiTree T)
{
	BiTree stack[MAXSIZE];//定义一个栈。用于存放结点的指针
	int top;//定义栈顶指针
	BitNode *p,*q;//定义结点的指针
	top=0;//初始化栈
	p=T,q=NULL;
	while(p!=NULL||top>0)
	{
		while(p!=NULL)//假设p不空。訪问根结点。遍历左子树
		{
		   stack[top++]=p;//将p入栈
		   p=p->lchild;//遍历左子树
		}
		if(top>0)//假设栈不空
		{
			p=stack[top-1];//取栈顶元素
			if(p->rchild==NULL||p->rchild==q)
				//假设p没有右孩子结点,或者右孩子结点已经訪问过
			{
                printf("%2c",T->data);//訪问根结点
				q=p;
				p=NULL;
				top--;//出栈
			}
			else
				p=p->rchild;
		}
	}
}


二叉树的遍历实现

标签:printf   算法   树的遍历   article   遍历二叉树   maxsize   max   后序   name   

原文地址:http://www.cnblogs.com/gccbuaa/p/6814213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!