453 字
2 分钟
二叉树

树#

树是一种常见的数据结构,在许多地方都有使用

二叉树则是其中更加广泛使用的一种树

二叉树#

一个常见的二叉树节点的定义是这样的:

template<typename T>
struct Node {
T element;
Node* left = nullptr;
Node* right = nullptr;
}

一个二叉树节点内有两个特殊的成员:left 和 right 用于指向其下的子节点

一些二叉树的特性#

  • 深度 从根节点开始延伸下来到目标节点的经过的边数
  • 高度 从目标节点开始向下到最远的叶子节点的层数

形象理解,对于下面的这个二叉树: 对于其节点B:

  • 深度:从A开始到B只有一条边,所以深度为1
  • 高度:从B往下的最远的叶子节点是F,中间有两层,所以高度为2

二叉树最值得注意的便是它的各种遍历:

先序遍历#

void preorderTraversal() {
std::cout << element;
if (left && !leftThread) {
left->preorderTraversal(isTidy);
}
if (right && !rightThread) {
right->preorderTraversal(isTidy);
}
}

先序遍历,就是先访问该节点下的元素后,再访问其各个子节点的方式

后序遍历#

void postorderTraversal() {
if (left && !leftThread) {
left->postorderTraversal(isTidy);
}
if (right && !rightThread) {
right->postorderTraversal(isTidy);
}
std::cout << element;
}

后序遍历,就是先访问该节点下的两个子节点后,再访问自己所拥有的元素的方式

中序遍历#

void inorderTraversal() {
if (left && !leftThread) {
left->inorderTraversal(isTidy);
}
std::cout << element;
if (right && !rightThread) {
right->inorderTraversal(isTidy);
}
}

中序遍历,就是按照:左 -> 中 -> 右 的顺序依次访问,其中所谓的“中”便是该节点本身

三种遍历之间的关系#

需要知道的是:确定中序遍历 + 先序遍历或者后续遍历即可确定一个二叉树的结构

二叉树
https://github.com/posts/数据结构/二叉树/
作者
FZSGBall
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0