测试-第一次写文章

 大家好

哈哈哈

谢谢

测测

  1. 好好好
  2. 急急急
  3. 还可以不

    #include <stdio.h>
    #include<malloc.h> 
    #include<queue>
    #include<stack>
    using namespace std;
    typedef struct LNode{
    	int data;
    	struct LNode *lchild, *rchild;	
    }; 
    
    //层序创建二叉树
    struct LNode* creat(int a[],int n)
    {
    	if(n==0)
    		return NULL;
    	
    	queue<LNode*> q;
    	LNode *root=(LNode*)malloc(sizeof(LNode));
    	root->data=a[0];
    	root->lchild=NULL;
    	root->rchild=NULL;
    	q.push(root);
    	
    	for(int i=1;i<n;i=i+2)
    	{
    		LNode *p=q.front();
    		q.pop();
    		if(a[i]!=-1)
    		{
    			LNode *l=(LNode*)malloc(sizeof(LNode));
    			l->data=a[i];
    			l->lchild=NULL;
    			l->rchild=NULL;
    			p->lchild=l;
    			q.push(l);
    		}
    		
    		if(a[i+1]!=-1&&i+1<n)
    		{
    			LNode *r=(LNode*)malloc(sizeof(LNode));
    			r->data=a[i+1];
    			r->lchild=NULL;
    			r->rchild=NULL;
    			p->rchild=r;
    			q.push(r);
    		}
    	}
    	return root;
    } 
    
    //先序遍历二叉树递归
    void xianxu(LNode *root) 
    {
    	if(root==NULL)
    	return ;
    	printf("%d ",root->data);
    	xianxu(root->lchild);
    	xianxu(root->rchild);
    }
    
    //中序遍历二叉树递归
    void zhongxu(LNode *root)
    {
    	if(root==NULL)
    	return ;
    	zhongxu(root->lchild);
    	printf("%d ",root->data);
    	zhongxu(root->rchild);
    } 
    
    //后序遍历二叉树递归
    void houxu(LNode *root)
    {
    	if(root==NULL)
    	return ;
    	houxu(root->lchild);
    	houxu(root->rchild);
    	printf("%d ",root->data);
    } 
    
    //先序遍历 非递归
    void feixianxu(LNode *root)
    {
    	stack<LNode *> s;
    	s.push(root);
    	while(!s.empty())
    	{
    		LNode *p=s.top();
    		s.pop();
    		printf("%d ",p->data);
    		if(p->rchild)
    		s.push(p->rchild);
    		if(p->lchild)
    		s.push(p->lchild);
    	} 
    }
    
    //中序遍历 非递归 
    void feizhongxu(LNode *root)
    {
    	stack<LNode *> s;
    	LNode *p=root;
    	while(p||!s.empty())
    	{
    		if(p)
    		{
    			s.push(p);
    			p=p->lchild;
    		}else
    		{
    			p=s.top();
    			s.pop();
    			printf("%d ",p->data);
    			p=p->rchild;
    		}
    	}
    }
    
    int main()
    {
    	//int a[7]={1,2,3,4,5,6,7};
    	int a[15]={38,22,49,17,34,47,55,-1,-1,-1,35,-1,48,50,56};//-1表示为空 
    	LNode *root=creat(a,15);
    	printf("先序遍历:\n"); 
    	xianxu(root);
    	printf("\n先序遍历(非递归):\n"); 
    	feixianxu(root);
    	printf("\n中序遍历:\n"); 
    	zhongxu(root); 
    	printf("\n中序遍历(非递归):\n"); 
    	feizhongxu(root);
    	printf("\n后序遍历:\n"); 
    	houxu(root); 
    	
    	 
    }
    
    
    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值