#第一篇博客文章,因为现在放寒假,没事干,刚好复习一下二叉树,看看两年半的我能够怎么样水文章,琼楼,首战#
二叉树
二叉树,顾名思义,就是两个叉的树,类似于下图所述,那么如果是三个或者多个,那这样还是二
叉树吗?显然不是,二叉树最多是只有两个树枝的。
j
在数据结构中,树都是倒的,把分叉的点叫做结点,接下来是比较精简的描述。
二叉树的基本概念
二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。以下是二叉树的一些基本概念:
-
节点(Node):二叉树中的基本单元,包含数据和指向左右子节点的指针。
-
根节点(Root):二叉树的最顶层节点。
-
叶子节点(Leaf):没有子节点的节点。
-
深度(Depth):从根节点到某个节点的边数。
-
高度(Height):从某个节点到最远叶子节点的边数。
-
满二叉树(Full Binary Tree):每个节点要么有两个子节点,要么没有子节点。
-
完全二叉树(Complete Binary Tree):从左到右填满的二叉树,最后一层可能不完全填满。
-
平衡二叉树(Balanced Binary Tree):左右子树高度差不超过1的二叉树。
满二叉树
完全二叉树
平衡二叉树
这是平衡的,因为高度差为1
上图就是不平衡的,高度为二,注意的事,平衡二叉树不必满足完全二叉树的条件。
二叉树的遍历
二叉树的遍历是学习二叉树的重要内容之一,常见的遍历方式有:
-
前序遍历(Pre-order Traversal):访问根节点 -> 遍历左子树 -> 遍历右子树。
-
中序遍历(In-order Traversal):遍历左子树 -> 访问根节点 -> 遍历右子树。
-
后序遍历(Post-order Traversal):遍历左子树 -> 遍历右子树 -> 访问根节点。
-
层序遍历(Level-order Traversal):按层次从上到下、从左到右遍历。
以一个完全二叉树为例
前序遍历(Pre-order Traversal)
A->B->D->E->C->F->G
中序遍历(In-order Traversal)
D->B->E->A->F->C->G
后序遍历(Post-order Traversal)
D->E->B->F->G->C->A
层序遍历(Level-order Traversal)
A->B->C->D->E->F->G
二叉树的实现
二叉树可以通过递归或非递归的方式实现。以下我主要讲的时递归的方法实现二叉树。
1)准备工作
2)创建孩子节点
3)创建二叉树
4)销毁二叉树
以上就是基本的递归实现方法,代码可能有些冗余,但基本都是参考书上的。
二叉树的应用
二叉树在计算机科学中有广泛的应用,包括但不限于:
-
二叉搜索树(Binary Search Tree, BST):一种有序的二叉树,左子树上的所有节点值小于根节点值,右子树上的所有节点值大于根节点值。
-
平衡二叉树(如 AVL 树、红黑树):用于实现高效的查找、插入和删除操作。
-
堆(Heap):一种特殊的完全二叉树,用于实现优先队列。
-
表达式树:用于表示和求解算术表达式。
-
Huffman 编码树:用于数据压缩。
总结
以上技能都是值得去学习的,后续我可能会继续更新其他关于二叉树的一些相关知识,加油,小伙伴们,熟能生巧,期待明年的我是如何,你们呢?