题目链接
相似题目
L2-006 树的遍历
步骤:
1、根据前序遍历和中序遍历建立二叉树
2、递归翻转左右子树
3、使用队列的先进先出性质实现层次遍历(广度优先)
#include#include #include #include using namespace std; int A[35]; int B[35]; int N; typedef struct TNode { struct TNode* left; struct TNode* right; int data; }*Tree; Tree BuildTree(int X[],int Y[],int n) { //建立二叉树 if (n <= 0 ) return NULL; int i = 0; while (X[i] != Y[0])i++; //cout << n << endl; Tree p = (Tree)malloc(sizeof(struct TNode)); p->data = X[i]; //cout << "left" << endl; p->left = BuildTree(X, &Y[1], i); //cout << "right" << endl; p->right = BuildTree(&X [ i + 1], &Y [ i + 1], n - i - 1); return p; } void Reverse(Tree& T) { //翻转左右子树 if (T == NULL) return; Reverse(T->left); Reverse(T->right); TNode* temp = T->left; T->left = T->right; T->right = temp; } vector Level(Tree T) { //层次遍历 queue Q; vector ans; Q.push(T); while (!Q.empty()) { TNode* p = Q.front(); Q.pop(); if (p->left != NULL) Q.push(p->left); if (p->right != NULL)Q.push(p->right); ans.push_back(p->data); } return ans; } int main() { cin >> N; for (int i = 0; i < N; i++) cin >> A[i]; for (int i = 0; i < N; i++) cin >> B[i]; Tree root = BuildTree(A, B, N); Reverse(root); vector ans = Level(root); for (int i = 0; i < N; i++) { cout << ans[i]; if (i != N - 1) cout << " "; } return 0; }



