数据结构—树

介绍

树是一个或多个结点的有限集合,存在一个称为根的特定结点,其余的节点被分为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);
}
相关推荐
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠3 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾3 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8213 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q3 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒3 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记3 天前
单项不带头不循环链表
数据结构·链表
小糯米6013 天前
JS 数组
数据结构·算法·排序算法
小欣加油3 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒3 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode