用层序生成二叉树

Posted 两片空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用层序生成二叉树相关的知识,希望对你有一定的参考价值。

思想与伪代码

在这里插入图片描述
在这里插入图片描述

实现代码:

#include<stdio.h>
#include<Windows.h>
#include<stdbool.h>
#include<stdlib.h>
#pragma warning(disable:4996)
#define Null 0//空结点
//用队列建立一颗二叉树
typedef struct Tree{//建立树信息
	int data;
	struct Tree *left;
	struct Tree *right;
}tree;
typedef struct Tree* Mytree;
typedef struct Queue{//建立队列信息
	Mytree *a;
	int front;
	int rear;
	int capacity;
}Myqueue;


Mytree TreenodeCreate(int a){//创建树结点
	Mytree Q = (Mytree)malloc(sizeof(tree));
	Q->data = a;
	Q->left = NULL;
	Q->right = NULL;
	return Q;
}

Myqueue *QueuenodeCreate(int cap){//创建队列结点
	Myqueue *queue = (Myqueue *)malloc(sizeof(Myqueue));
	queue->a = (Mytree *)malloc(sizeof(Mytree)*cap);
	queue->capacity = cap;
	queue->front = 0;
	queue->rear = 0;
	return queue;
}

void AddQ(Myqueue *queue, Mytree Q){//将树结点保存到队列中
	queue->rear = (queue->rear + 1) % queue->capacity;
	queue->a[queue->rear] = Q;
}
Mytree DeleteQ(Myqueue *queue){//将树节点出队
	queue->front = (queue->front + 1) % queue->capacity;
	return queue->a[queue->front];
}

bool Isempty(Myqueue *queue){//判定队列是否为空
	if (queue->front == queue->rear){
		return true;
	}
	return false;
}


Mytree TreeCreate(){
	int data;
	printf("Please Enter The Data#");
	scanf("%d", &data);
	Mytree Q = NULL;;
	Myqueue *queue = QueuenodeCreate(10);//创建一个空队列
	if (data == Null){//这里通过输入数据判断是否要创建新的树结点
		return Q;
	}
	
	Q = TreenodeCreate(data);//创建一颗树,元素信息为输入的data
	AddQ(queue, Q);//将树结点入队
	Mytree T;
	while (!(Isempty(queue))){//判断队列是否为空,不为空就说明还有树节点是否要生成左子树,右子树
		T = DeleteQ(queue);//拿出树结点
		int x = 0;
		printf("Please Enter The LX");
		scanf("%d", &x);//输入数据
		if (x == Null){
			T->left = NULL;
		}
		else{
			T->left = TreenodeCreate(x);//先生成左子树
		}
		printf("Please Enter The RX");
		scanf("%d", &x);
		if (x == Null){
			T->right = NULL;
		}
		else{
			T->right = TreenodeCreate(x);//后生成右子树
		}
		if (T->left){//为空树不入队
			AddQ(queue, T->left);//将左子树入队
		}
		if (T->right){
			AddQ(queue, T->right);//将右子树入队
		}

	}
	return Q;
}


int main(){

	Mytree S = TreeCreate();

	system("pause");
	return 0;
}

以上是关于用层序生成二叉树的主要内容,如果未能解决你的问题,请参考以下文章

建立二叉树,层序、先序遍历

代码随想录算法训练营第15天 | ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2

二叉树的遍历方法之层序-先序-中序-后序遍历的简单讲解和代码示例

LeetCode二叉树的层序遍历

LeetCode二叉树的层序遍历

c++二叉树按层序遍历顺序输入(由上到下),先序遍历顺序输出,求完整代码