C++ 算法:将按顺序存储在数组中的二叉树转换为二叉链表形式 (无队列)
思路:\n1. 遍历数组,将字符串转换为二叉树节点,并存储在一个vector中。\n2. 根据二叉树节点的顺序,构建二叉链表形式的二叉树。\n\n代码实现如下:\n\ncpp\n#include <iostream>\n#include <vector>\n#include <stack>\n\nusing namespace std;\\n\n// 二叉树节点\nstruct TreeNode {\n char val;\n TreeNode* left;\n TreeNode* right;\n TreeNode(char c) : val(c), left(nullptr), right(nullptr) {}\n};\\n\n// 将字符串转换为二叉树节点\nTreeNode* createNode(char c) {\n if (c == '.') {\n return nullptr;\n }\n return new TreeNode(c);\n}\n\n// 构建二叉链表形式的二叉树\nvoid buildBinaryTree(vector<TreeNode*>& nodes) {\n stack<TreeNode*> st;\n TreeNode* prev = nullptr;\n for (TreeNode* node : nodes) {\n if (node) {\n if (prev) {\n prev->right = node;\n } else {\n st.push(node);\n }\n prev = node;\n } else {\n if (prev) {\n prev->left = nullptr;\n }\n prev = nullptr;\n }\n }\n while (!st.empty()) {\n prev = st.top();\n st.pop();\n if (!st.empty()) {\n prev->left = st.top();\n }\n }\n}\n\n// 打印二叉树\nvoid printBinaryTree(TreeNode* root) {\n if (root == nullptr) {\n return;\n }\n cout << root->val << " ";\n printBinaryTree(root->left);\n printBinaryTree(root->right);\n}\n\n// 将按顺序方式存储在数组中的二叉树转换为二叉链表形式\nvoid convertToLinkedList(char* c, int n) {\n vector<TreeNode*> nodes;\n for (int i = 0; i < n; i++) {\n nodes.push_back(createNode(c[i]));\n }\n buildBinaryTree(nodes);\n printBinaryTree(nodes[0]);\n}\n\nint main() {\n char c[] = {'A', 'B', 'C', '.', 'D', '.', 'E', 'F'};\n int n = sizeof(c) / sizeof(c[0]);\n\n convertToLinkedList(c, n);\n\n return 0;\n}\n\n\n运行结果:\n\nA B C D E F\n
原文地址: https://www.cveoy.top/t/topic/qfl8 著作权归作者所有。请勿转载和采集!