数据结构—树

介绍

树是一个或多个结点的有限集合,存在一个称为根的特定结点,其余的节点被分为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);
}
相关推荐
晴天的雨.99212 分钟前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
淡海水8 小时前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2401_8390805412 小时前
C++常见八股
数据结构·c++·算法
暮雨封夕12 小时前
跳表(Skip List)详解:原理、实现、使用场景与实际应用
数据结构
miller-tsunami12 小时前
排序的相关知识点
数据结构·排序算法
Logic10117 小时前
C语言/数据结构滑动窗口题解:替换k个字符后的最长连续相同字符子串(LeetCode 424)
c语言·数据结构·字符串·滑动窗口·时间复杂度·频率统计·算法题
程序员阿鹏18 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
爱奥尼欧19 小时前
【C++】map、set 的底层是什么?红黑树五条性质、插入旋转到模拟实现
开发语言·数据结构·c++
动词ing20 小时前
【题目练习】动态规划+背包问题
数据结构·目标检测