21xrx.com
2024-09-20 05:36:37 Friday
登录
文章检索 我的文章 写文章
C++实现二叉树
2023-06-28 08:07:26 深夜i     --     --
C++语言 二叉树数据结构 节点及其属性 遍历算法(前序 中序 后序) 插入

二叉树是一种非常重要的数据结构,它被广泛应用于计算机科学中的各个领域。在本文中,我们将介绍如何使用C++语言来实现二叉树,并实现一些基本的操作。

二叉树结构如下图所示:


      root

      / \

      /  \

   left   right

其中,每个节点最多只有两个子节点。左节点和右节点可以是空的,这就是一个二叉树。

首先,让我们来看看二叉树节点的定义。它包括存储数据和指向其左右子节点的指针。这里是一个基本的节点结构定义:


struct TreeNode {

  int val;

  TreeNode* left;

  TreeNode* right;

  TreeNode(int x) : val(x), left(NULL), right(NULL) {}

};

现在,我们需要实现插入、查找和删除节点等基本操作。这些都需要对节点进行递归操作。

插入操作:


void insert(TreeNode*& root, int val) {

  if (!root) {

    root = new TreeNode(val);

    return;

  }

  if (val < root->val) {

    insert(root->left, val);

  } else {

    insert(root->right, val);

  }

}

查找操作:


bool find(TreeNode* root, int val) {

  if (!root)

    return false;

  

  if (root->val == val)

    return true;

   else if (val < root->val) {

    return find(root->left, val);

  } else {

    return find(root->right, val);

  }

}

删除操作:


void remove(TreeNode*& root, int val) {

  if (!root)

    return;

  

  if (root->val == val) {

    if (!root->left && !root->right)

      delete root;

      root = NULL;

     else if (!root->left || !root->right) {

      TreeNode* temp = root->left ? root->left : root->right;

      delete root;

      root = temp;

    } else {

      TreeNode* temp = root->right;

      while (temp->left)

        temp = temp->left;

      

      root->val = temp->val;

      remove(root->right, temp->val);

    }

  } else if (val < root->val) {

    remove(root->left, val);

  } else {

    remove(root->right, val);

  }

}

在上面的代码中,我们首先检查该节点是否存在,然后针对它的子节点分别进行删除操作。如果该节点既有左子节点,又有右子节点,则我们需要找到右子树中最小的节点,将它的值赋给该节点,然后从右子树中删除它。

以上就是C++实现二叉树的基本操作,当然还有其他很多操作,比如树的遍历、层次遍历等。在实际使用中,我们可以根据需要进行相应的修改和拓展。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复