21xrx.com
2024-12-22 22:12:48 Sunday
登录
文章检索 我的文章 写文章
C++实现二叉树的代码
2023-07-08 02:50:14 深夜i     --     --
C++ 二叉树 代码实现

在计算机编程中,二叉树是一种常见的数据结构,其每个节点最多有两个子节点。在C++编程语言中,我们可以使用类的形式实现二叉树。

首先,我们需要定义一个节点类,该类包含节点的值以及指向其左子节点和右子节点的指针。


class Node{

public:

  int value;

  Node* left;

  Node* right;

  Node(int val)

    value = val;

    left = NULL;

    right = NULL;

  

};

接下来,我们需要定义一个二叉树类。该类包含一个指向树根节点的指针。


class BinaryTree{

public:

  Node* root;

  BinaryTree()

    root = NULL;

  

};

接下来,我们需要实现一些基本方法,如插入节点、删除节点、查找节点以及遍历二叉树。

### 插入节点

插入节点方法是向二叉树中添加一个新节点。我们从根节点开始,将新节点与现有节点进行比较,将其插入左子树或右子树。


void insertNode(Node **root, int value){

  if(*root == NULL)

    *root = new Node(value);

  else if(value <= (*root)->value)

    insertNode(&(*root)->left, value);

  else

    insertNode(&(*root)->right, value);

}

### 删除节点

删除节点方法将从二叉树中删除给定的节点。如果节点是叶节点,则可以直接删除。如果它具有一个子节点,则将其子节点提升为其位置。如果它具有两个子节点,则用它的右子树中的最小值替换它,并将替换节点删除。


void deleteNode(Node** root, int value){

  if(*root == NULL)

    return;

  if(value < (*root)->value)

    deleteNode(&(*root)->left, value);

  else if(value > (*root)->value)

    deleteNode(&(*root)->right, value);

  else{

    if((*root)->left == NULL || (*root)->right == NULL){

      Node* tmp = (*root)->left ? (*root)->left : (*root)->right;

      if(tmp == NULL){

        tmp = *root;

        *root = NULL;

      } else

        **root = *tmp;

      delete tmp;

    } else{

      Node* tmp = findMin((*root)->right);

      (*root)->value = tmp->value;

      deleteNode(&(*root)->right, tmp->value);

    }

  }

}

### 查找节点

查找节点方法返回具有给定值的节点的指针。我们从树根开始,将其与给定值进行比较,并根据需要遍历其左子树或右子树。


Node* findNode(Node* root, int value){

  if(root == NULL)

    return NULL;

  else if(root->value == value)

    return root;

  else if(value < root->value)

    return findNode(root->left, value);

  else

    return findNode(root->right, value);

}

### 遍历二叉树

遍历二叉树方法为我们提供了访问树节点集的方式。有三种主要遍历方式:先序遍历、中序遍历和后序遍历。先序遍历按照一个节点-左子树-右子树的顺序访问树节点。中序遍历按照左子树-一个节点-右子树的顺序访问树节点。后序遍历按照左子树-右子树-一个节点的顺序访问树节点。


//先序遍历

void preOrder(Node* root){

  if(root != NULL){

    cout<<root->value<<" ";

    preOrder(root->left);

    preOrder(root->right);

  }

}

//中序遍历

void inOrder(Node* root){

  if(root != NULL){

    inOrder(root->left);

    cout<<root->value<<" ";

    inOrder(root->right);

  }

}

// 后序遍历

void postOrder(Node* root){

  if(root != NULL){

    postOrder(root->left);

    postOrder(root->right);

    cout<<root->value<<" ";

  }

}

在C++中实现二叉树代码是一个有趣的编程挑战。通过使用类和指针,我们可以轻松地实现这种常见数据结构、实现各种插入和删除节点操作,以及遍历整个树来检索数据。

  
  

评论区

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