数据结构--树

数据结构--顺序表,链表,双向链表-CSDN博客

数据结构--栈,队列,串,广义表-CSDN博客

目录

数据结构--顺序表,链表,双向链表-CSDN博客

二.树

7.树

8.二叉树

[8.1 满二叉树](#8.1 满二叉树)

[8.2 完全二叉树](#8.2 完全二叉树)

[8.3 遍历二叉树](#8.3 遍历二叉树)

[8.3.1 前序(根 左子树 右子树)](#8.3.1 前序(根 左子树 右子树))

[8.3.2中序(左子树 根 右子树)](#8.3.2中序(左子树 根 右子树))

[8.3.3后序(左子树 右子树 根)](#8.3.3后序(左子树 右子树 根))

9.图


二.树

7.树

7.1.1定义:是n个节点的有限集

7.1.2树的基本概念

根 : 一个特殊的节点,没有前驱节点

子树 :

节点 :

节点的度 :一个节点含有的子树的个数

叶子(终端节点) :度为0的节点

非终端节点(分支节点) :度不为0的节点

树的度 :最大的节点的度

双亲 :有一个节点含有子节点,这个节点称为其子节点的双亲

兄弟 :具有同一个父节点的节点

祖先 :从根到该节点所经分支上的所有节点

子孙 :以某节点为根的子树中任意一个节点都称为该节点的子孙

层次 :从根开始,根为第一层,根的节点是第二层,以此类推

堂兄弟 :双亲在同一层的节点

树的深度 :树中节点的最大层次

无序树 :

森林 :由m棵互不相交的树的集合

8.二叉树

8.1 满二叉树

8.2 完全二叉树

8.3 遍历二叉树

8.3.1 前序(根 左子树 右子树)

1 (2 (3 N N) N)(4(5 N N)(6 N N))

123456

8.3.2中序(左子树 根 右子树)

((N 3 N)2 N)1(N 5 N) 4 (N 6 N))

321546

时间复杂度:O(N)

空间复杂度:O(h)、

h是高度:[log(N),N]

8.3.3后序(左子树 右子树 根)

((N N 3) N 2) ((N N 5)(N N 6) 4) 1

325641

8.3.4层序

递归:1.子问题2.返回条件

8.4二叉树的实现和计算

8.4.1二叉树的声明
复制代码
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>


typedef int BTDataType;
typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;
8.4.2扩容
复制代码
BTNode* BuyNode(BTDataType x)
{
	BTNode* node = (BTNode*)malloc(sizeof(BTNode));
	if (node == NULL)
	{
		perror("malloc fail");
		return NULL;
	}

	node->data = x;
	node->left = NULL;
	node->right = NULL;

	return node;
}
8二叉树的初步创建
复制代码
BTNode* CreatBinaryTree()
{
	BTNode* node1 = BuyNode(1);
	BTNode* node2 = BuyNode(2);
	BTNode* node3 = BuyNode(3);
	BTNode* node4 = BuyNode(4);
	BTNode* node5 = BuyNode(5);
	BTNode* node6 = BuyNode(6);
	BTNode* node7 = BuyNode(7);


	node1->left = node2;
	node1->right = node4;
	node2->left = node3;
	node4->left = node5;
	node4->right = node6;
	node5->left = node7;

	return node1;
}
8.4.5二叉树节点个数
复制代码
// 二叉树结点个数
//void BTreeSize(BTNode* root)
//{
//	static int size = 0;
//	//printf("%p,%d\n", &size, size);
//
//	if (root == NULL)
//		return;
//	
//	++size;
//
//	BTreeSize(root->left);
//	BTreeSize(root->right);
//}
8.4.6叶子节点个数
复制代码
// 求叶子节点的个数
int BTreeLeafSize(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}

	if (root->left == NULL
		&& root->right == NULL)
	{
		return 1;
	}

	return BTreeLeafSize(root->left)
		+ BTreeLeafSize(root->right);
}
8.4.7二叉树的高度
复制代码
int BTreeHeight(BTNode* root)
{
	if (root == NULL)
		return 0;

	int leftHeight = BTreeHeight(root->left);
	int rightHeight = BTreeHeight(root->right);

	return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}
8.4.8二叉树第k层结点个数
复制代码
int BTreeLevelKSize(BTNode* root, int k)
{
	assert(k > 0);

	if (root == NULL)
		return 0;

	if (k == 1)
		return 1;

	return BTreeLevelKSize(root->left, k - 1)
		+ BTreeLevelKSize(root->right, k - 1);
}

树不能轻易用assert(),因为树里面一定有空。

9.图

相关推荐
CoovallyAIHub2 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub2 小时前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI19 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v1 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工1 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农1 天前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了1 天前
AcWing学习——双指针算法
c++·算法
moonlifesudo1 天前
322:零钱兑换(三种方法)
算法
NAGNIP2 天前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队2 天前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法