树的基础算法(二)二叉树

一 二叉树的定义与性质

1.1 定义

二叉树(Binary Tree)是由节点组成的树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。若节点没有子节点,则称为叶子节点;若只有一个子节点,则需明确左或右。

1.2 核心性质

1.2.1 节点关系:

  • 节点数 = 边数 + 1。
  • 深度(Depth):根节点深度为0,子节点深度逐层递增。
  • 高度(Height):从节点到最远叶子节点的最长路径边数。

1.2.2 特殊类型:

  • 满二叉树:所有层节点数达到最大值(第i层有2i个节点)。
  • 完全二叉树:除最后一层外,其他层填满,最后一层左对齐。
  • 二叉搜索树(BST):左子树值 < 根节点值 < 右子树值。
  • 平衡二叉树(AVL/红黑树):左右子树高度差 ≤ 1(AVL),或近似平衡(红黑树)。

二 基础算法

2.1 基本操作

2.1.1 节点结构体定义​

typedef struct TreeNode {
    int data;
    struct TreeNode* left;
    struct TreeNode* right;
} TreeNode;

功能:存储节点值及左右子节点指针;

2.1.2 插入节点(以BST为例)​

TreeNode* insertBST(TreeNode* root, int val) {
    if (root == NULL) return createNode(val);
    if (val < root->data) root->left = insertBST(root->left, val);
    else root->right = insertBST(root->right, val);
    return root;
}

复杂度:平均O(log n),最坏O(n)(树退化为链表)。

2.1.3 查找节点​

TreeNode* searchBST(TreeNode* root, int val) {
    if (root == NULL || root->data == val) return root;
    return (val < root->data) ? searchBST(root->left, val) : searchBST(root->right, val);
}

复杂度:同插入操作。

2.1.4 删除节点​

TreeNode* deleteBST(TreeNode* root, int key) {
    if (root == NULL) return root;
    if (key < root->data) root->left = deleteBST(root->left, key);
    else if (key > root->data) root->right = deleteBST(root->right, key);
    else {
        if (root->left == NULL) return root->right;
        else if (root->right == NULL) return root->left;
        else {
            TreeNode* minNode = findMin(root->right);
            root->data = minNode->data;
            root->right = deleteBST(root->right, minNode->data);
        }
    }
    return root;
}

逻辑:处理叶子节点、单子节点、双子节点三种情况。

2.2 遍历算法

posted on 2025-11-19 11:39  weiwei2021  阅读(0)  评论(0)    收藏  举报