C/C++ 树、二叉树

结构和名称

路径:从根到叶子的任意一条路径

路径长度:边的数目

度:对于一个结点,它的孩子的数量。

二叉树:

性质:

  • 对于一颗满二叉树,若他有k层,则他的结点最多有2^k - 1个。
  • 对于一颗满二叉树,若他有k层,则他的叶子最多有2^(k - 1)个。
  • 度为0的点总比度为2的结点多一个
  • 对于一颗完全二叉树,n个结点的树有log(2, n)(向下取整) + 1层。
  • 层序遍历一颗完全二叉树并从0开始标号,对于任意结点i,若其孩子存在,则它的左右孩子分别是2*i + 1, 2* i + 2,非叶子结点范围为0 ~ n / 2 - 1。

满二叉树

每一层的叶子都是满的

CBT 完全二叉树

  • 树中只允许最后一层有空缺,并且其空缺方式从右向左连续空缺。
  • 度为1的点只有0或1个

BST 二叉搜索树

对于任意节点,它的右子树的所有点都比它大,它的左子树的所有点都比它小。

AVL 二叉平衡搜索树

在BST的基础上,保证任意任意结点左右子树高度差不超过1。

RBT 红黑树

将结点标记为红色或黑色,并依照颜色之间的规则保证树的平衡。

B/B+树:多路平衡搜索树。

数据库、硬盘等多使用。

二叉树

二叉树的结构

typedef struct node {
	int nValue;
	struct node* left;
	struct node* right;
}binarytree;

二叉树的三种递归遍历

void trav_front(binarytree now) { //前序遍历
	if (now == nullptr) return;
	printf("%d ", now->nValue);
	trav_front(now->left);
	trav_front(now->right);
}
void trav_mid(binarytree now) { //中序遍历
	if (now == nullptr) return;
	trav_mid(now->left);
	printf("%d ", now->nValue);
	trav_mid(now->right);
} 
void trav_back(binarytree now) { //后序遍历
	if (now == nullptr) return;
	trav_back(now->left);
	trav_back(now->right);
	printf("%d ", now->nValue);
}

ps:已知中序遍历顺序和前序或后序遍历顺序的其中一个,便可还原出二叉树。

例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值