int *BinaryTreeToArray(Node *root) { int *arr = new int[8]; // Skipping index 0 for simplicity BinaryTreeToArrayHelper(root, arr, 8, 1); return arr; } void BinaryTreeToArrayHelper(Node *n, int *arr, int size, int index) { if (!n || index > size - 1) return; arr[index] = n->value; BinaryTreeToArrayHelper(n->left, arr, size, index * 2); BinaryTreeToArrayHelper(n->right, arr, size, index * 2 + 1); }
Node *ArrayToBinaryTree(int *arr, int size) { if (!arr || 1 > size) return nullptr; Node *root = new Node(arr[1]), *curr = nullptr; queue<Node*> q; q.push(root); int index = 1;
while (!q.empty()) { curr = q.front(); if (index < size / 2) { curr->left = new Node(arr[index * 2]); q.push(curr->left); curr->right = new Node(arr[index * 2 + 1]); q.push(curr->right); } q.pop(); index++; } return root; }