【C++算法教程】二叉树

1. 二叉树的概念

二叉树是每个节点最多有两个子节点的树结构,‌通常称为“左子节点”和“右子节点”。‌二叉树常被用于实现数据结构的优先队列和集合,‌以及搜索算法中的二叉搜索树。‌

2. 二叉树的性质

  • 每个节点最多有两个子节点。‌
  • 左子节点的值通常小于其父节点的值,‌右子节点的值通常大于其父节点的值(‌这在二叉搜索树中尤为重要)‌。‌
  • 二叉树可以是空的。‌

3. C++中的二叉树实现

在C++中,‌我们可以通过定义一个结构体或类来表示树的节点,‌每个节点包含数据部分、‌指向左子节点的指针和指向右子节点的指针。‌

struct TreeNode {
    int value;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : value(x), left(nullptr), right(nullptr) {}
};

4. 基本操作

-‌插入节点‌:‌向二叉树中插入一个新的值。‌
-‌删除节点‌:‌从二叉树中删除一个节点。‌
-‌搜索节点‌:‌查找二叉树中是否存在某个值。‌

插入节点

对于二叉搜索树,‌插入操作通常遵循以下步骤:‌

  1. 如果树为空,‌创建一个新节点作为根节点。‌
  2. 如果插入的值小于根节点的值,‌则递归地在左子树中插入。‌
  3. 如果插入的值大于根节点的值,‌则递归地在右子树中插入。‌
void insert(TreeNode*& root, int value) {
    if (root == nullptr) {
        root = new TreeNode(value);
        return;
    }
    if (value < root->value) {
        insert(root->left, value);
    } else {
        insert(root->right, value);
    }
}

删除节点 

删除节点的方法主要取决于节点的位置以及是否只能访问该节点。‌

  • 如果‌不是尾节点‌,‌且‌可以访问其前一个节点‌,‌则将其前一个节点的next指针指向待删除节点的下一个节点,‌然后释放待删除节点的内存。‌
  • 如果‌是尾节点‌,‌则需要找到尾节点的前一个节点,‌将其next指针指向null,‌然后释放尾节点的内存。‌
  • 如果‌只能访问待删除的节点‌,‌则无法直接删除,‌因为无法访问其前一个节点以修改next指针。‌这种情况下,‌通常需要额外的信息或方法来处理,‌例如使用双向链表或维护一个指向待删除节点前一个节点的引用。‌‌
搜索节点

搜索操作通常遵循以下步骤:‌

  1. 如果树为空,‌说明没有找到。‌
  2. 如果要搜索的值等于根节点的值,‌返回true。‌
  3. 如果要搜索的值小于根节点的值,‌递归地在左子树中搜索。‌
  4. 如果要搜索的值大于根节点的值,‌递归地在右子树中搜索。‌
bool search(TreeNode* root, int value) {
    if (root == nullptr) {
        return false;
    }
    if (root->value == value) {
        return true;
    } else if (value < root->value) {
        return search(root->left, value);
    } else {
        return search(root->right, value);
    }
}

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值