zoukankan      html  css  js  c++  java
  • 二叉树的遍历实现

    二叉树的先序遍历
    //先序遍历二叉树的递归实现
    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;
    		}
    	}
    }
    


  • 相关阅读:
    遍历迭代map的集中方法
    雅可比迭代法
    Myeclipse无法开启Servers视图解决办法
    JS去除空格方法记录
    10分钟学会前端调试利器——FireBug
    Linux入门
    Maven工程引入jar包
    android一些常用的代码1(收藏)
    android中列表的滑动删除仿ios滑动删除
    android 中使用缓存加载数据
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6814213.html
Copyright © 2011-2022 走看看