3. 假设二叉树的节点元素为单个字符,设计一个算法,将一颗二叉链表表示的二叉树b转化为顺序存储的。
时间: 2023-06-27 21:01:00 浏览: 107
将二叉树按照中序遍历的顺序,将节点元素依次存储到数组中,即可得到顺序存储的二叉树。
具体算法步骤如下:
1. 初始化一个大小为n的数组a。
2. 中序遍历二叉树b,依次将节点元素存储到数组a中。
3. 将数组a按照完全二叉树的形式重新排列。
4. 返回重排后的数组a,即为顺序存储的二叉树。
代码实现如下(假设二叉树节点结构体为Node):
```C++
void inorderTraversal(Node* root, char* a, int& i) {
if(root) {
inorderTraversal(root->left, a, i);
a[i++] = root->data;
inorderTraversal(root->right, a, i);
}
}
char* convertToSequential(Node* root, int n) {
char* a = new char[n];
int i = 0;
inorderTraversal(root, a, i);
for(int j = 1; j <= n / 2; j++) {
swap(a[j], a[j * 2]);
swap(a[j], a[j * 2 - 1]);
}
return a;
}
```
其中,inorderTraversal函数为中序遍历二叉树的递归实现,convertToSequential函数为转化为顺序存储的主函数。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)