二叉树的代码编写

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、二叉树的建立(C语言)

在这里插入图片描述
二叉树的节点的结构体创建

typedef struct node
{
	int date;			//数据
	struct node *left;	//左子树
	struct node *right;	//右子树
	
}Node;

在函数中声明节点,并赋予节点数据

Node n1;
	Node n2;
	Node n3;
	Node n4;
	Node n5;
	Node n6;
	
	n1.date = 1;
	n2.date = 2;
	n3.date = 3;
	n4.date = 4;
	n5.date = 5;
	n6.date = 6;

建立节点的连接

n1.left  = n2;
	n1.right = &n3; //要取地址
	n2.left  = &n4;
	n2.right = &n5;
	n3.left  = NULL;
	n3.right = &n6;
	n4.left  = NULL;
	n4.right = NULL;
	n5.left  = NULL;
	n5.right = NULL;
	n6.left  = NULL;
	n6.right = NULL;

全部代码

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
	int date;			//数据
	struct node *left;	//左孩子
	struct node *right;	//右孩子
	
}Node;


int main()
{
	Node n1;
	Node n2;
	Node n3;
	Node n4;
	Node n5;
	Node n6;
	
	n1.date = 1;
	n2.date = 2;
	n3.date = 3;
	n4.date = 4;
	n5.date = 5;
	n6.date = 6;
	
	n1.left  = &n2; //要取地址
	n1.right = &n3;
	n2.left  = &n4;
	n2.right = &n5;
	n3.left  = NULL;
	n3.right = &n6;
	n4.left  = NULL;
	n4.right = NULL;
	n5.left  = NULL;
	n5.right = NULL;
	n6.left  = NULL;
	n6.right = NULL;

	return 0;
}

二、前序遍历

1.前序遍历的方式

根节点 —— 左子树 —— 右子树
在这里插入图片描述
比如上面是二叉树的前序遍历的顺序为:1-2-4-5-3-6

2.代码实现

代码如下(示例):

void preorder(Node *node)  //遍历使用递归
{
	if(node != NULL){
		printf("%d\n",node -> date);  //输出数据
		preorder(node -> left);		  //左子树
		preorder(node -> right);	  //右子树
	} else return;					  //设定递归结束条件
}
preorder(&n1); //前序遍历   从根节点开始

运行结果为:
在这里插入图片描述

三、中序遍历

1.中序遍历的实现方式

左子树 —— 根节点 —— 右子树

在这里插入图片描述
比如上面是二叉树的前序遍历的顺序为:4-2-5-1-3-6

2.代码实现

代码如下(示例):

void inorder(Node *node)//     中序遍历   左——根——右
{
	if(node != NULL){
		inorder(node -> left);		//左子树
		printf("%d",node -> date);	//输出数据
		inorder(node -> right);		//右子树
	}
}
inorder(&n1); //中序遍历   从根节点开始

运行结果为:
在这里插入图片描述

四、后序遍历

1.后序遍历的实现方式

左子树 —— 右子树 —— 根节点
在这里插入图片描述
比如上面是二叉树的前序遍历的顺序为:4-5-2-6-3-1

2.代码实现

代码如下(示例):

void postorder(Node *node)//   后序遍历  左——右——根
{
	if(node != NULL){
		postorder(node -> left);		//左子树
		postorder(node -> right);		//右子树
		printf("%d",node -> date);	//输出数据
		
	}
}
postorder(&n1); //后序遍历   从根节点开始

运行结果为:
在这里插入图片描述

完整代码

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
	int date;			//数据
	struct node *left;	//左孩子
	struct node *right;	//右孩子
	
}Node;

void preorder(Node *node)  //遍历使用递归   前序遍历   根——左——右
{
	if(node != NULL){
		printf("%d",node -> date);    //输出数据
		preorder(node -> left);		  //左子树
		preorder(node -> right);	  //右子树
	}else return;  					  //设定递归结束条件
}

void inorder(Node *node)//     中序遍历   左——根——右
{
	if(node != NULL){
		inorder(node -> left);		//左子树
		printf("%d",node -> date);	//输出数据
		inorder(node -> right);		//右子树
	}
}

void postorder(Node *node)//   后序遍历  左——右——根
{
	if(node != NULL){
		postorder(node -> left);		//左子树
		postorder(node -> right);		//右子树
		printf("%d",node -> date);	//输出数据
		
	}
}

int main()
{
	Node n1;
	Node n2;
	Node n3;
	Node n4;
	Node n5;
	Node n6;
	
	n1.date = 1;
	n2.date = 2;
	n3.date = 3;
	n4.date = 4;
	n5.date = 5;
	n6.date = 6;
	
	n1.left  = &n2; //要取地址
	n1.right = &n3;
	n2.left  = &n4;
	n2.right = &n5;
	n3.left  = NULL;
	n3.right = &n6;
	n4.left  = NULL;
	n4.right = NULL;
	n5.left  = NULL;
	n5.right = NULL;
	n6.left  = NULL;
	n6.right = NULL;

	preorder(&n1); //前序遍历   从根节点开始
	printf("\n");

	inorder(&n1);
	printf("\n");

	postorder(&n1);
	printf("\n");

	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值