📜  二叉树(1)

📅  最后修改于: 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;
  }
};

以上是一个二叉树的插入操作。它可以接受一个二叉树的根节点和一个要插入的值。如果根节点为空,直接插入一个新节点并返回。如果插入值比节点小,则插入到左子树中,否则插入到右子树中。递归下去,直到找到合适的插入位置。

总结

二叉树是一种常见的数据结构,它有多种类别和应用。通过掌握二叉树的遍历和实现方法,可以有效地解决二叉树相关的问题。