c语言实现层次遍历二叉树完整代码

//混用了一下c和c++(仅输入输出混用了一下,其他没有)

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

#define MaxSize 50

//树
typedef char DataType;
typedef struct tnode {
	DataType data;
	struct tnode* lchild, * rchild;
}BT, * BTT;


// 函数声明
BT* Create_(); // 先序创建二叉树
void cen_bianli_(BT* T); //层次遍历二叉树
void visit_(BT* p); //输出函数
void visit2(BT* T); //中序遍历二叉树

//main函数
int main()
{
	BT* T; 

	T = Create_();
	//Create_(T); 
	printf("中序遍历:");
	visit2(T);
	printf("层次遍历:");
	cen_bianli_(T);

	return 0;
}

//中序遍历 
void visit2(BT* T)
{
	//printf("1");
	if (T != NULL)
	{
		visit2(T->lchild);
		printf("%c ", T->data);//cout << T->data << " ";
		visit2(T->rchild);
	}
}


//先序创建二叉树 
BT* Create_()
{
	BT* t;
	char ch;
	cin >> ch;//scanf("%c", &ch);
	getchar();

	if (ch == '#')
	{
		t = NULL;
	}
	else
	{
		t = (BT*)malloc(s
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言层次遍历二叉树完整代码如下: ```c #include <stdio.h> #include <stdlib.h> // 树节点的结构体 typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 定义队列结构体 typedef struct QueueNode { struct TreeNode* data; struct QueueNode* next; } QueueNode; // 定义队列 typedef struct Queue { QueueNode* front; QueueNode* rear; } Queue; // 初始化队列 void initQueue(Queue* q) { q->front = q->rear = NULL; } // 判断队列是否为空 int isEmpty(Queue* q) { return q->front == NULL; } // 入队 void enqueue(Queue* q, TreeNode* node) { QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode)); newNode->data = node; newNode->next = NULL; if (isEmpty(q)) { q->front = q->rear = newNode; } else { q->rear->next = newNode; q->rear = newNode; } } // 出队 TreeNode* dequeue(Queue* q) { if (isEmpty(q)) { return NULL; } QueueNode* node = q->front; TreeNode* data = node->data; if (q->front == q->rear) { q->front = q->rear = NULL; } else { q->front = q->front->next; } free(node); return data; } // 层次遍历二叉树 void levelOrderTraversal(TreeNode* root) { if (root == NULL) { return; } Queue q; initQueue(&q); enqueue(&q, root); while (!isEmpty(&q)) { TreeNode* node = dequeue(&q); printf("%d ", node->val); if (node->left) { enqueue(&q, node->left); } if (node->right) { enqueue(&q, node->right); } } } int main() { // 构造二叉树 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = 1; TreeNode* left = (TreeNode*)malloc(sizeof(TreeNode)); left->val = 2; TreeNode* right = (TreeNode*)malloc(sizeof(TreeNode)); right->val = 3; TreeNode* leftLeft = (TreeNode*)malloc(sizeof(TreeNode)); leftLeft->val = 4; TreeNode* leftRight = (TreeNode*)malloc(sizeof(TreeNode)); leftRight->val = 5; root->left = left; root->right = right; left->left = leftLeft; left->right = leftRight; right->left = right->right = leftLeft->left = leftLeft->right = leftRight->left = leftRight->right = NULL; // 层次遍历二叉树 levelOrderTraversal(root); return 0; } ``` 在代码中,我们使用了队列来实现层次遍历。具体思路是先将根节点入队,然后依次出队,访问其左右子节点,再将左右子节点入队,以此类推,直到队列为空。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值