栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

树的基本操作—创建树、插入结点、遍历输出、树的高度、树的最大值、删除数据(一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

树的基本操作—创建树、插入结点、遍历输出、树的高度、树的最大值、删除数据(一)

今天,我们主要来学习创建树、向树中插入结点、树的遍历输出。

目录

1. 树的定义

1.1 创建树

1.2 创建结点

2. 插入结点

3. 遍历输出

3.1 前序遍历

3.2 中序遍历

3.3 后序遍历


1. 树的定义

树是一种非线性的数据结构,它由n(n>0)个有限结点组成。树形结构像一颗倒挂的树。

1.1 创建树
//创建树
typedef struct tree {
	Node* root;
}Tree;

1.2 创建结点

结点:树由结点组成。结点包括数据域、左子结点、右子结点。

//创建结点
typedef struct node {
	int data;
	struct node* left;
	struct node* right;
}Node;

2. 插入结点

解决思路:

情况一:树的根节点为空,则创建的是根节点;

情况二:树的根结点不为空,定义一个临时比较的节点temp来作为新插入结点的父结点。从树的根节点开始查找temp结点,直到temp为叶子结点。最后通过判断新结点的值与temp结点的值的大小来决定是作为左子结点还是右子结点,比temp结点的值小则作为左子结点,比temp结点的值大则作为右子结点。

void insert(Tree* tree, int value) {
	Node* node = (Node*)malloc(sizeof(Node));//把value打包成一个节点并分配空间
	node->data = value;
	node->left = node->right = NULL;
	if (tree->root == NULL) {
		tree->root = node;
	}
	else {
		Node* temp = tree->root;//临时比较的根节点
		while (temp != NULL) {
			if (value < temp->data) {
				if (temp->left == NULL) {
					temp->left = node;
					return;
				}
				else {
					temp = temp->left;
				}
			}
			else {
				if (temp->right == NULL) {
					temp->right = node;
					return;
				}
				else {
					temp = temp->right;
				}
			}
		}
	}
}

3. 遍历输出

前、中、后序遍历主要就是头结点什么时候处理,简要的说前序遍历的输出顺序是头结点、左子树、右子树;中序遍历的输出顺序是左子树、头结点、右子树;后序遍历的输出顺序是左子树、右子树、头结点。我们可以利用递归的思想,简便的求解。

3.1 前序遍历
void preprint(Node* node) {
	if (node != NULL) {
		printf("%d ", node->data);
		preprint(node->left);
		preprint(node->right);
	}
}

3.2 中序遍历
void centerprint(Node* node) {
	if (node != NULL) {
		centerprint(node->left);
		printf("%d ", node->data);
		centerprint(node->right);
	}
}

3.3 后序遍历
void endprint(Node* node) {
	if (node != NULL) {
		endprint(node->left);
		endprint(node->right);
		printf("%d ", node->data);
	}
}

今天,我们树的学习就结束了,明天继续。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702427.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号