建立顺序存储完全二叉树并以广义表形式输出
题目要求:
假设用顺序表来表示一棵完全二叉树。从根到叶结点按层次从 1 开始编号,同一层次从左到右编号,数据存储在对应的数组元素中。试编写算法由此顺序存储结构建立该二叉树的二叉链表。
输入格式:
输入只有一行,为顺序输入的从根节点开始的各个节点元素,它们之间用空格隔开,整个输入以 $ 结束。
输出格式:
输出有一行,为二叉树结构的广义表达式。
样例输入:
A B C D $
样例输出:
A(B(D),C)
解题思路:
由完全二叉树的特点可得,若父亲结点的索引为 i,那么该父亲结点的左孩子的索引为 2 * i + 1,右孩子的索引为 2 * i + 2。
代码编写:
#include <iostream>
#include <string>
using namespace std;
class Node {
public:
char data;
Node *lchild;
Node *rchild;
Node(char _data) {
data = _data;
lchild = NULL;
rchild = NULL;
}
~Node() {
if(lchild != NULL