二叉树2

欢迎进入@shuai:二叉树2;

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#define size 100
typedef struct tree{
	int data;
	struct tree *l,*r;
}tree;
tree * isno(){
	int n;
	tree*bt;
	bt=(tree*)malloc(sizeof(tree));
	printf("请输入根节点(0表示空)");
	scanf("%d",&n);
	if(n==0){
		printf("此树为空");
		exit(0); 
	} 
	else{
		bt->data=n;
		bt->l=0;
		bt->r=0;
		printf("根为%d的树建立成功\n",n);
	}
	return bt;
	}
	creat(tree *bt){
		tree *node;
		int n;
		printf("请输入%d节点的左孩子\n",bt->data);
		scanf("%d",&n);
		if(n!=0){
			node=(tree*)malloc(sizeof(tree));
			node->data=n;
			node->l=0;
			node->r=0;
			bt->l=node;
			creat(bt->l);
		}
		printf("请输入节点为%d的右孩子\n",bt->data);
		scanf("%d",&n);
		if(n!=0){
			node=(tree*)malloc(sizeof(tree));
			node->data=n;
			node->l=0;
			node->r=0;
			bt->r=node;
			creat(bt->r);
		}
		return 0;
	}
	print(tree *bt){
		if(bt){
		printf("%d",bt->data);//先序输出 
		print(bt->l);
//		printf("%d",bt->data);//中序输出 
		print(bt->r);
//		printf("%d",bt->data);//后序输出 
		}
	}
	printcen(tree *bt){
		tree **q;
		tree *p;
		int front,rear;
		q=(tree**)malloc(size*sizeof(tree*));
		front=0,rear=0;
		rear=(rear+1)%size;
		q[rear]=bt;
		while(front!=rear){
			front=(front+1)%size;
			p=q[front];
			printf("%d ",p->data);
			if(p->l){
				rear=(rear+1)%size;
				q[rear]=p->l;
			}
			if(p->r){
			rear=(rear+1)%size;
			q[rear]=p->r;
		}
		}
		free(q);
	} 
main()
{
	tree *bt;
	bt=isno();
	creat(bt);
	print(bt);
printcen(bt);
}

1.二叉搜索树的建立以及输出QAAQ,
2.typedef struct tree{
int data;
struct *left;
struct right;
}tree;
用形如这样的结构体来定义树的节点,left指向下一级,right指向同级
3.有些函数返回值要注意一下(上述代码中的isno就是这样),可能要返回一个节点,这是应该用tree

4.先序输出,中序输出,后序输出分别对应着第一,二,三次遇到这个节点时是否输出,如图,
在这里插入图片描述对于每个节点都会有三次经过的机会,三次中可以选择是否输出,
5.按层输出这用到了队列先入先出的特点( 不久的将来会复习队列的时候会写博客呦)
https://baike.baidu.com/item/队列/14580481?fr=aladdin
遇到节点入队,然后他的左右儿子入队,然后依次出队就好(),
6. 加油努力鸭!QAQ “ ---- “
相关题目:
数字统计:https://www.luogu.org/problemnew/show/P1179
最小生成树:https://www.luogu.org/problemnew/show/P3366
亲戚:https://www.luogu.org/problemnew/show/P1551
发现错误,疑惑不解,联系作者:1939096278@qq.com
欢迎联系呦 -------- QAQ ---------;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值