📅  最后修改于: 2023-12-03 15:06:19.786000             🧑  作者: Mango
二叉树是一种树状数据结构,它由一个根节点,以及每个节点最多有两个子节点组成。这两个子节点被称为“左子节点”和“右子节点”。
满二叉树是指除了最后一层节点不满外,每一层的节点数都等于满二叉树的节点数。如下图所示:
A
/ \
B C
/ \ / \
D E F G
完全二叉树是指除了最后一层节点不满,其他层都必须填满节点,而且最后一层节点都集中在树的左边。如下图所示:
A
/ \
B C
/ \ /
D E F
二叉搜索树(BST)是一种特殊的二叉树,它的左子节点的值比父节点的值小,右子节点的值比父节点的值大。如下图所示:
10
/ \
5 15
/ \ / \
3 8 12 17
前序遍历是指先访问根节点,再访问左子节点,最后访问右子节点。如上面的二叉搜索树,前序遍历顺序为:10, 5, 3, 8, 15, 12, 17。
中序遍历是指先访问左子节点,再访问根节点,最后访问右子节点。如上面的二叉搜索树,中序遍历顺序为:3, 5, 8, 10, 12, 15, 17。
后序遍历是指先访问左子节点,再访问右子节点,最后访问根节点。如上面的二叉搜索树,后序遍历顺序为:3, 8, 5, 12, 17, 15, 10。
二叉搜索树可以有效地用来搜索特定值的节点。由于二叉搜索树的特殊结构,可以利用二分查找的思路来进行搜索操作。在搜索时,如果目标值比当前节点小,则在左子树中搜索;否则在右子树中搜索,直到找到目标节点或者到达空节点为止。
二叉搜索树可以利用它的中序遍历输出得到有序的节点值序列。因此,可以通过二叉搜索树来实现排序功能。
二叉树的实现可以利用指针来描述节点之间的关系。每个节点包含一个值和左右子节点的指针。二叉树可以通过递归的方式来实现。以下是一个C++的二叉树实现示例:
class TreeNode {
public:
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
TreeNode* insertNode(TreeNode* root, int val) {
if (!root) {
return new TreeNode(val);
}
if (val < root->val) {
root->left = insertNode(root->left, val);
} else {
root->right = insertNode(root->right, val);
}
return root;
}
};
以上是一个二叉树的插入操作。它可以接受一个二叉树的根节点和一个要插入的值。如果根节点为空,直接插入一个新节点并返回。如果插入值比节点小,则插入到左子树中,否则插入到右子树中。递归下去,直到找到合适的插入位置。
二叉树是一种常见的数据结构,它有多种类别和应用。通过掌握二叉树的遍历和实现方法,可以有效地解决二叉树相关的问题。