通过寻找根节点的下标来划分左右子树,递归打印
#include <iostream>
#include <string>
using namespace std;
struct Node {
string data;
int leftChildIndex, rightChildIndex;
};
struct Node *nodes;
int rootIndex(bool *index, int n) {
for (int i = 1; i <= n; i++) {
if (index[i] == false) {
return i;
}
}
return -1;
}
void printTree(int rootIndex) {
int left = nodes[rootIndex].leftChildIndex;
if (left != -1) {
if (nodes[left].leftChildIndex != -1) printf("(");
printTree(nodes[rootIndex].leftChildIndex);
if (nodes[left].leftChildIndex != -1) printf(")");
}
cout << nodes[rootIndex].data;
int right = nodes[rootIndex].rightChildIndex;
if (right != -1) {
if (nodes[right].rightChildIndex != -1) printf("(");
printTree(nodes[rootIndex].rightChildIndex);
if (nodes[right].rightChildIndex != -1) printf(")");
}
}
int main() {
int n = 0;
cin >> n;
nodes = new struct Node[n + 1];
bool *index = new bool[n + 1];
for (int i = 1; i <= n; i++) {
cin >> nodes[i].data >> nodes[i].leftChildIndex >> nodes[i].rightChildIndex;
if (nodes[i].leftChildIndex != -1) index[nodes[i].leftChildIndex] = true;
if (nodes[i].rightChildIndex != -1) index[nodes[i].rightChildIndex] = true;
}
int root = rootIndex(index, n);
if (root == -1) {
cout << "error";
} else {
printTree(root);
}
delete [] index;
delete [] nodes;
return 0;
}
构建树结构并打印
本文介绍了一种通过寻找根节点的下标来划分左右子树的方法,并使用递归方式打印出树形结构。该方法首先定义了树节点的结构体,然后通过输入获取树的结构信息,最终找到根节点并递归打印整个树。
400

被折叠的 条评论
为什么被折叠?



