数据结构—树

介绍

树是一个或多个结点的有限集合,存在一个称为根的特定结点,其余的节点被分为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);
}
相关推荐
ic爱吃蓝莓2 小时前
数据结构 | HashMap原理
数据结构·学习·算法·链表·哈希算法
liuyao_xianhui4 小时前
优选算法_分治_快速排序_归并排序_C++
开发语言·数据结构·c++·算法·leetcode·排序算法·动态规划
CryptoPP4 小时前
开发者指南:构建实时期货黄金数据监控系统
大数据·数据结构·笔记·金融·区块链
月落归舟5 小时前
每日算法题 14---14.环形链表
数据结构·算法·链表
光电笑映5 小时前
STL 源码解剖系列:map/set 的底层复用与红黑树封装
c语言·数据结构·c++·算法
沉鱼.445 小时前
滑动窗口问题
数据结构·算法
ysa0510306 小时前
二分+前缀(预处理神力2)
数据结构·c++·笔记·算法
灰色小旋风6 小时前
力扣22 括号生成(C++)
开发语言·数据结构·c++·算法·leetcode
寒月小酒6 小时前
3.23 OJ
数据结构·c++·算法