21xrx.com
2024-05-20 13:00:39 Monday
登录
文章检索 我的文章 写文章
用c++实现树形结构
2023-07-11 15:47:17 深夜i     --     --
c++ 树形结构 数据结构 算法

树形结构是一种非常实用和常见的数据结构,它能够模拟类似树的结构,在其中存储和操作数据。在计算机科学中,树形结构被广泛应用于编程语言,操作系统,数据结构等领域中。本文将重点介绍如何使用C++实现树形结构。

首先,我们需要了解树形结构的概念。树形结构是一种分层的数据结构,由结点和边组成。它是一种无向图,其中任何两个结点之间都有一条唯一的路径连接。树形结构中具有如下特点:

1.没有父结点的结点被称为根结点。

2.除了根结点以外的每个结点有且仅有一个父结点。

3.每个结点可以有多个子结点。

接下来,我们将使用C++语言来实现树形结构。首先我们需要定义一个树结构体,它包含了一个结点值和一个指向其子树的指针数组。代码如下:


struct TreeNode {

  int val;

  vector<TreeNode*> children;

  TreeNode(int x) : val(x) {};

};

在这个结构体中,我们使用了一个vector来存储子结点指针。在C++中,vector是一种动态数组,可以根据需要自动调整大小。在本例中,我们使用vector来存储子结点指针,以便可以支持任意数量的子结点。

接下来,我们可以使用构造函数来创建一个新的树结点,如下所示:


TreeNode* newNode(int val) {

  TreeNode* node = new TreeNode(val);

  return node;

}

现在我们已经定义了树形结构的结点,接下来我们需要实现一些基本操作。首先,我们可以实现一个插入子结点的函数,如下所示:


void insertNode(TreeNode* parent, TreeNode* child) {

  parent->children.push_back(child);

}

这个函数用于向指定的父结点插入一个子结点。我们使用push_back函数将子结点指针存储在父结点的子树vector中。

下一个步骤是实现一个遍历树的函数。下面的代码演示了如何在树中按深度优先顺序遍历结点:


void dfs(TreeNode* root) {

  if (root == NULL) return;

  cout << root->val << endl;

  for (int i = 0; i < root->children.size(); i++) {

    dfs(root->children[i]);

  }

}

在这个函数中,我们首先输出根结点的值,然后递归遍历每个子结点。

最后,我们可以使用下面的代码创建一个树并进行一些基本操作:


int main() {

  TreeNode* root = newNode(1);

  TreeNode* node2 = newNode(2);

  TreeNode* node3 = newNode(3);

  insertNode(root, node2);

  insertNode(root, node3);

  TreeNode* node4 = newNode(4);

  TreeNode* node5 = newNode(5);

  insertNode(node2, node4);

  insertNode(node2, node5);

  dfs(root);

  return 0;

}

在这个例子中,我们创建了一个根结点1,然后向其添加结点2和3作为子结点。接着我们给结点2添加了两个子结点4和5。最后,我们使用深度优先顺序遍历树并输出节点值。

通过本文的介绍和示例代码,相信读者已经了解如何使用C++实现树形结构。树形结构是一种非常实用和重要的数据结构,可以用于各种编程和算法设计中。希望本篇文章能够为读者提供有关树形结构的基本知识和实现方式,帮助开发者在编程过程中更好地应用它。

  
  

评论区

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