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;
    		}
    	}
    }
    


  • 相关阅读:
    P2P理财友情提示
    P2P理财友情提示
    如何在Chrome development tool里查看C4C前台发送的请求细节
    CRM和ERP的Sales Organization的映射关系
    如何从ERP将Material的Batch信息下载到CRM并存储在settype COMM_PR_BATCH里
    CRM中间件里的发布-订阅者模式
    CRM订单状态的Open, In process和Completed这些条目是从哪里来的
    如何证明CRM WebClient UI上的应用是有状态(Stateful)的
    如何使用代码获得一个function module的Where Used List
    观察者模式在One Order回调函数中的应用
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6814213.html
Copyright © 2011-2022 走看看