玩轉二叉樹
給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。
輸入格式:
輸入第一行給出一個正整數N(≤30),是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出其前序遍歷序列。數字間以空格分隔。
輸出格式:
在一行中輸出該樹反轉後的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。
輸入樣例:
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
輸出樣例:
4 6 1 7 5 3 2
解題
遍歷時先遍歷右子樹即可,見L2-011 玩轉二叉樹
程式碼實現見樹的遍歷
僅是將輸入和程式碼實現由後序、中序,變為中序、前續。
使用了小技巧,不建議使用
程式碼
#include <iostream>
using namespace std;
struct cheng {
int num = 0;
int all[20];
} cheng[30];
int findXian(int *qian, int *zhong, int n, int c) {
if (n > 0) {
int root = qian[0];
int i;
for (i = 0; i < n; ++i) {
if (zhong[i] == root) {
cheng[c].all[cheng[c].num] = root;
cheng[c].num++;
break;
}
}
findXian(qian + i+1, zhong + i + 1, n-i-1, c + 1);//先右後左
findXian(qian+1, zhong, i, c + 1);
}
return c;
}
int main() {
int n;
cin >> n;
int qian[n], zhong[n];
for (int i = 0; i < n; ++i) {
cin >> zhong[i];
}
for (int i = 0; i < n; ++i) {
cin >> qian[i];
}
findXian(qian, zhong, n, 0);
int temp = 0;
while (cheng[temp].num != 0) {
for (int j = 0; j < cheng[temp].num; ++j) {
if (temp != 0)cout << " " << cheng[temp].all[j];
else cout << cheng[temp].all[j];
}
temp++;
}
}
相關文章
- 玩轉二叉樹(樹的遍歷)二叉樹
- L2-011 玩轉二叉樹二叉樹
- 團體程式設計天梯賽-玩轉二叉樹(簡潔建樹)程式設計二叉樹
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 二叉樹和森林轉換二叉樹
- 二叉樹 & 二叉查詢樹二叉樹
- iOS實現反轉二叉樹iOS二叉樹
- [資料結構] 樹、二叉樹、森林的轉換資料結構二叉樹
- C4top-玩轉二叉樹(根據前序中序映象反轉後層次遍歷)二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉查詢樹(二叉排序樹)排序
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 用樹莓派玩轉藍芽樹莓派藍芽
- 二叉樹翻轉(分治思想的典型)二叉樹
- 哈夫曼二叉樹原始碼 (轉)二叉樹原始碼
- 手擼二叉樹——二叉查詢樹二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹
- 二叉樹的應用(1)--二叉樹排序樹基本操作二叉樹排序
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 【筆記】樹、森林與二叉樹的轉換與應用筆記二叉樹
- 如何輕鬆玩轉樹莓派系統?樹莓派
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 判斷某棵二叉樹是否二叉排序樹二叉樹排序
- 樹和二叉樹簡介二叉樹
- n叉樹vs二叉樹二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- 樹(2)--二叉樹的遍歷(非遞迴)+線索二叉樹二叉樹遞迴
- 洛谷U4727小L的二叉樹[樹轉序列 LIS]二叉樹
- 迭代二叉樹二叉樹