2021-11-14

该博客介绍了如何使用栈来实现非递归的二叉树中序遍历。通过创建一个栈结构并进行一系列的push和pop操作,实现了在不使用递归的情况下遍历二叉树并输出节点数据。示例代码中定义了栈的数据结构,二叉树的结构体,以及相关操作如初始化栈、压栈、出栈和检查栈是否为空的函数。此外,还给出了创建二叉树和中序遍历的函数。
在这里插入代码片
```#include "stdio.h"
#include "malloc.h"
#define max 20
//创建二叉树结构体 
typedef struct node{
	char data;
	struct node *lchild,*rchild;
}Tree,*btree;
//创建栈 
typedef struct{
	Tree elem[max];
	int top;
}stack;
void init(stack *s){
	s->top=0;
}
void push(stack *s,Tree e){
	if(s->top==20){
		printf("栈满\n");
		return;
	}else{
		s->elem[s->top++]=e;
	}
}
void pop(stack *s,Tree *e){
	if(s->top==0){
		printf("栈空\n");
		return;
	}else{
		s->top--;
		*e=s->elem[s->top];
	}
}
int empty(stack *s){
	if(s->top==0){
		return 1;
	}else{
		return 0;
	}
}
//创建二叉树 
void creat(btree *t){
	char a;
	scanf("%c",&a);
	if(' '==a){
		*t=NULL;
	}else{
		*t=(btree)malloc(sizeof(btree));
		(*t)->data=a;
		creat(&((*t)->lchild));
		creat(&((*t)->rchild));
	}
}
//中序非递归遍历输出 
void inorder(btree t){
	if(!t){
		return;
	}
	stack s;
	init(&s);
	Tree e;
	btree p=t;
	while(p||!empty(&s)){
		if(p){
			push(&s,*p);
			p=p->lchild;
		}else{
			pop(&s,&e);
			printf("%c\n",e.data);
			p=e.rchild;
		}
	}
}
int main(){
	btree t=NULL;
	printf("输入:\n");
	creat(&t);
	printf("中序遍历输出:\n");
	inorder(t);
}![在这里插入图片描述](https://img-blog.csdnimg.cn/b763237b96674df9b989ce8e82ea1182.png#pic_center)


现有3张业务表,详见如下: 需要输出结果如下,请写出对应的MYSQL 示例1 输入: CREATE TABLE new_user( user_id int(11) NOT NULL, is_new int(11) NOT NULL, PRIMARY KEY (user_id) ); CREATE TABLE user_pay( user_id int(11) NOT NULL, pay_money int(11) NOT NULL, dt char(20) NOT NULL ); CREATE TABLE login_record( user_id int(11) NOT NULL, login_time char(20) NOT NULL, dt char(20) NOT NULL ); insert into new_user values(1,0); insert into new_user values(2,1); insert into new_user values(3,1); insert into new_user values(4,0); insert into new_user values(5,0); insert into new_user values(6,1); insert into new_user values(7,0); insert into new_user values(8,1); insert into user_pay values(1,30,'2021-11-10'); insert into user_pay values(1,100,'2021-11-10'); insert into user_pay values(2,500,'2021-11-11'); insert into user_pay values(2,200,'2021-11-12'); insert into user_pay values(3,1000,'2021-11-10'); insert into user_pay values(4,800,'2021-11-12'); insert into user_pay values(6,1200,'2021-11-10'); insert into user_pay values(6,700,'2021-11-14'); insert into login_record values(1,'8:00','2021-11-10'); insert into login_record values(1,'12:00','2021-11-10'); insert into login_record values(1,'13:00','2021-11-10'); insert into login_record values(2,'16:00','2021-11-10'); insert into login_record values(2,'12:35','2021-11-11'); insert into login_record values(2,'18:34','2021-11-12'); insert into login_record values(3,'20:00','2021-11-10'); insert into login_record values(4,'21:00','2021-11-12'); insert into login_record values(5,'21:00','2021-11-13'); insert into login_record values(6,'22:30','2021-11-10'); insert into login_record values(6,'13:30','2021-11-14'); 输出: dt dau dau_new total_pay total_pay_new 2021-11-10 4 3 2330 2200 2021-11-11 1 1 500 500 2021-11-12 2 1 1000 200 2021-11-13 1 0 0 0 2021-11-14 1 1 700 700
05-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值