纯C++二叉树相关操作实例代码分析

发布时间:2022-07-12 10:25:02 作者:iii
来源:亿速云 阅读:207

纯C++二叉树相关操作实例代码分析

二叉树是一种常见的数据结构,广泛应用于各种算法和数据处理场景中。本文将详细介绍如何使用纯C++实现二叉树的基本操作,包括创建、遍历、插入、删除等操作,并通过代码实例进行分析。

1. 二叉树的定义

二叉树是每个节点最多有两个子节点的树结构,通常称为左子节点和右子节点。二叉树的节点可以定义如下:

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

在这个定义中,TreeNode结构体包含一个整数值val,以及指向左子节点和右子节点的指针leftright

2. 二叉树的创建

二叉树的创建可以通过递归方式实现。以下是一个简单的二叉树创建函数:

TreeNode* createTree() {
    int val;
    std::cin >> val;
    if (val == -1) {
        return nullptr;
    }
    TreeNode* root = new TreeNode(val);
    root->left = createTree();
    root->right = createTree();
    return root;
}

在这个函数中,用户输入一个整数值,如果输入-1,则表示当前节点为空。否则,创建一个新的节点,并递归创建其左子树和右子树。

3. 二叉树的遍历

二叉树的遍历方式主要有三种:前序遍历、中序遍历和后序遍历。以下是这三种遍历方式的实现:

3.1 前序遍历

前序遍历的顺序是:根节点 -> 左子树 -> 右子树。

void preOrder(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    std::cout << root->val << " ";
    preOrder(root->left);
    preOrder(root->right);
}

3.2 中序遍历

中序遍历的顺序是:左子树 -> 根节点 -> 右子树。

void inOrder(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    inOrder(root->left);
    std::cout << root->val << " ";
    inOrder(root->right);
}

3.3 后序遍历

后序遍历的顺序是:左子树 -> 右子树 -> 根节点。

void postOrder(TreeNode* root) {
    if (root == nullptr) {
        return;
    }
    postOrder(root->left);
    postOrder(root->right);
    std::cout << root->val << " ";
}

4. 二叉树的插入

二叉树的插入操作通常用于二叉搜索树(BST)。以下是一个简单的二叉搜索树插入函数:

TreeNode* insert(TreeNode* root, int val) {
    if (root == nullptr) {
        return new TreeNode(val);
    }
    if (val < root->val) {
        root->left = insert(root->left, val);
    } else {
        root->right = insert(root->right, val);
    }
    return root;
}

在这个函数中,如果当前节点为空,则创建一个新节点并返回。否则,根据插入值的大小决定将其插入到左子树还是右子树。

5. 二叉树的删除

二叉树的删除操作相对复杂,需要考虑多种情况。以下是一个简单的二叉搜索树删除函数:

TreeNode* deleteNode(TreeNode* root, int key) {
    if (root == nullptr) {
        return nullptr;
    }
    if (key < root->val) {
        root->left = deleteNode(root->left, key);
    } else if (key > root->val) {
        root->right = deleteNode(root->right, key);
    } else {
        if (root->left == nullptr) {
            TreeNode* temp = root->right;
            delete root;
            return temp;
        } else if (root->right == nullptr) {
            TreeNode* temp = root->left;
            delete root;
            return temp;
        }
        TreeNode* temp = findMin(root->right);
        root->val = temp->val;
        root->right = deleteNode(root->right, temp->val);
    }
    return root;
}

TreeNode* findMin(TreeNode* root) {
    while (root->left != nullptr) {
        root = root->left;
    }
    return root;
}

在这个函数中,首先找到要删除的节点。如果该节点只有一个子节点,则直接删除该节点并返回其子节点。如果该节点有两个子节点,则找到右子树中的最小节点,将其值赋给当前节点,然后删除右子树中的最小节点。

6. 总结

本文介绍了如何使用纯C++实现二叉树的基本操作,包括创建、遍历、插入和删除。通过这些操作,我们可以灵活地处理二叉树数据结构,并应用于各种算法和数据处理场景中。希望本文的内容能够帮助读者更好地理解和掌握二叉树的相关操作。

推荐阅读:
  1. 二叉树的相关操作
  2. python日期相关操作实例小结

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:如何使用Typescript封装axios

下一篇:Mybatisplus数据权限DataPermissionInterceptor怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》