数据结构—树

介绍

树是一个或多个结点的有限集合,存在一个称为根的特定结点,其余的节点被分为n个互不相干的集合,相当于电脑文件管理

双亲和孩子:A是B,C,D的双亲(父结点)

性质:

  1. 数的所有结点数等于所有结点的度数之和加1
  2. 对于度为m的树,第i层上最多有m^i-1个结点
  3. 对于高度为h,宽为m的树,最多有(m^h-1)(m-1)个结点

二叉树

性质

  1. 二叉树的第i层最多有 2^ (i-1)(i>=1)个节点
  2. 深度为K的二叉树最多有 2^k -1 (k>=1)个节点
  3. 对于任何非空的二叉树T,如果叶子结点的个数为n0,而度为2的结点数为n2,则n0=n2+1

满二叉树:深度为k且含有2^k-1给结点的二叉树,所有叶子结点都只能出现在最后一层

完全二叉树:没有左子树,不能有右子树,上层没铺满,不能有下一层

代码

在二叉树中因为要改变一级指针所以要用二级指针

复制代码
#include "stdio.h"
#include "stdlib.h"


typedef char ElemType;

typedef struct tree_node
{
	ElemType data;
	//左孩子
	struct tree_node* lchild;
	//右孩子
	struct tree_node* rchild;
}TreeNode;

typedef TreeNode* BiTree;


int idx = 0;
//树的数据
char str[] ="ABDH#K###E##CFI###G#J##";

//造树,造树需要改变一级指针,所以要用二级指针
void TreeCreate(BiTree* T)
{
	ElemType ch;
	ch = str[idx++];
	if (ch == '#')
	{
		//这里改变一级指针
		*T = NULL;
		return;
	}
	else
	{
		*T = (TreeNode*)malloc(sizeof(TreeNode));
		(*T)->data = ch;
		TreeCreate(&((*T)->lchild));
		TreeCreate(&((*T)->rchild));
	}
}





//遍历二叉树,遍历不需要改变T,所有用一级指针
void PrePrder(BiTree T)
{
	if (T == NULL)
	{
		return;
	}
	//前序遍历
	//printf("%c ", T->data);
	PrePrder(T->lchild);
	//中序遍历
	//printf("%c ", T->data);
	PrePrder(T->rchild);	
	//后序遍历
	printf("%c ", T->data);
}

void main(void)
{
	BiTree T;
	TreeCreate(&T);
	PrePrder(T);
}
相关推荐
王璐WL4 小时前
【C语言入门级教学】函数的概念2
c语言·数据结构·算法
不知名的老吴10 小时前
双栈秒杀表达式的生成方式
数据结构
故事和你9110 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
信奥胡老师12 小时前
B3968 [GESP202403 五级] 成绩排序
数据结构·算法
z2005093014 小时前
今日算法(回溯算法)
数据结构·算法
m0_6294947314 小时前
LeetCode 热题 100-----28. 两数相加
数据结构·算法·leetcode·链表
一路往蓝-Anbo15 小时前
第五章:如何对 HAL 库本身进行单元测试?
网络·数据结构·stm32·单片机·嵌入式硬件·单元测试·tdd
青山师15 小时前
B+树与InnoDB索引深度解析:数据库索引的底层原理与工程实践
数据结构·数据库·b树·性能优化·b+树·索引优化·mysql性能
tongluowan00716 小时前
数据结构 Bitmap(位图)完整详解
开发语言·数据结构·bitmap
代码中介商16 小时前
排序算法完全指南(五):快速排序深度详解
数据结构·算法·排序算法