9.2 二叉树的遍历
9.2 二叉树的遍历
http://codeup.hustoj.com/contest.php?cid=100000611
D 二叉树遍历
题目解析
⚠️这道题之所以能用先序遍历就能构造树,是因为把空结点用#表示出来了
❗️仔细观察create函数,这里char c = pre[i++]; 然后根据c的值看要不要给root赋值。
(根据先序遍历的顺序,根结点-》左子树-》右子树)
代码
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
struct node {
char data;
node *lchild;
node *rchild;
};
int i;
string pre, in;
node* create() {
char c = pre[i++];
if (c == '#') return NULL;
node *root = new node;
root->data = c;
root->lchild = create();
root->rchild = create();
return root;
}
void inOrder(node *root) {
if (root == NULL) return;
inOrder(root->lchild);
in += root->data;
inOrder(root->rchild);
}
int main() {
while (cin >> pre) {
in = "";
i = 0;
inOrder(create());
for (int j = 0; j < in.size(); j++) {
printf("%c ", in[j]);
}
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号