题解 | 二叉树遍历
二叉树遍历
https://www.nowcoder.com/practice/6e732a9632bc4d12b442469aed7fe9ce
#include <iostream>
#include <string>
using namespace std;
typedef struct Node {
char root;
Node* rchild, *lchild;
} Node;
Node* recover(string preOrderString, string midOrderString) {
char c = preOrderString.at(0);
// 建立新节点
Node* cur = new Node;
cur->root = c;
cur->lchild = NULL;
cur->rchild = NULL;
int pos = midOrderString.find(c);
// 结束条件
if (preOrderString.size() == 0) {
return cur;
}
if (pos != 0) {
string preTemp = preOrderString.substr(1, pos);
string midTemp = midOrderString.substr(0, pos);
cur->lchild = recover(preTemp, midTemp);
}
if (pos + 1 != preOrderString.size()) {
string preTemp = preOrderString.substr(pos+1);
string midTemp = midOrderString.substr(pos+1);
cur->rchild = recover(preTemp, midTemp);
}
return cur;
}
void postOrder(Node* node){
if(node->lchild != NULL)
postOrder(node->lchild);
if(node->rchild != NULL)
postOrder(node->rchild);
cout << node->root;
}
int main() {
string preOrderString;
string midOrderString;
while (cin >> preOrderString >> midOrderString) {
// 重建二叉树
Node* node = new Node;
node = recover(preOrderString, midOrderString);
// 后序遍历
postOrder(node);
cout << endl;
}
}

查看14道真题和解析