要将按顺序方式存储在数组中的二叉树转换为二叉链表形式,可以使用递归的方式进行操作。\n\n首先,定义一个二叉树节点的结构体,包含一个值和两个指针(指向左子节点和右子节点)。\n\ncpp\nstruct TreeNode {\n int val;\n TreeNode* left;\n TreeNode* right;\n TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}\n};\n\n\n接下来,定义一个递归函数,该函数接受一个数组和两个索引参数,表示当前要处理的子树的范围(左闭右开区间)。\n\n在该函数中,首先判断左子节点的索引是否越界,如果没有越界,则创建一个新的节点,并将其赋值为数组中对应位置的值,然后递归调用函数,将左子节点的索引范围传递给递归函数。\n\n接着,判断右子节点的索引是否越界,如果没有越界,则创建一个新的节点,并将其赋值为数组中对应位置的值,然后递归调用函数,将右子节点的索引范围传递给递归函数。\n\n最后,返回当前节点。\n\ncpp\nTreeNode* convertToBinaryTree(vector<int>& nums, int start, int end) {\n if (start >= end) {\n return nullptr;\n }\n \n int mid = start + (end - start) / 2;\n TreeNode* root = new TreeNode(nums[mid]);\n \n root->left = convertToBinaryTree(nums, start, mid);\n root->right = convertToBinaryTree(nums, mid + 1, end);\n \n return root;\n}\n\n\n最后,调用该函数,传入数组和根节点的索引范围,即可得到二叉链表形式的二叉树。\n\ncpp\nvector<int> nums = {1, 2, 3, 4, 5, 6, 7};\nTreeNode* root = convertToBinaryTree(nums, 0, nums.size());\n\n\n这样,就将按顺序方式存储在数组中的二叉树转换为了二叉链表形式。

C++ 算法:将数组存储的二叉树转换为二叉链表

原文地址: https://www.cveoy.top/t/topic/qe3W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录