树的基础算法(二)二叉树
一 二叉树的定义与性质
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) 收藏 举报
浙公网安备 33010602011771号