玩轉二叉樹(樹的遍歷)
給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。
輸入格式:
輸入第一行給出一個正整數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
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 100;
struct node{
int data;
node* lchild;
node* rchild;
};
int pre[maxn], in[maxn], post[maxn];
int n;
node* creat(int preL, int preR, int inL, int inR){
if(preL > preR) return NULL;
node* root = new node;
root->data = pre[preL];
int k;
for(k = inL; k <= inR; k++){
if(in[k] == pre[preL]) break;
}
int numLeft = k-inL;
root->rchild = creat(preL+1, preL+numLeft, inL, k-1);
root->lchild = creat(preL+numLeft+1, preR, k+1, inR);
return root;
}
int num = 0;
void BFS(node* root){
queue<node*> q;
q.push(root);
while(!q.empty()){
node* now = q.front();
q.pop();
cout <<now->data;
num++;
if(num < n) cout << ' ';
if(now->lchild != NULL) q.push(now->lchild);
if(now->rchild != NULL) q.push(now->rchild);
}
}
int main(){
//ios::sync_with_stdio(false);
cin >> n;
for(int i = 0; i < n; i++){
cin >> in[i];
}
for(int i = 0; i < n; i++){
cin >> pre[i];
}
node* root = creat(0, n-1, 0, n-1);
BFS(root);
return 0;
}
反思
喵的!!!!我發現自己真的好懶呀!!!!只是Ctrl +C 和Ctrl+V, 啥時候才能掌握寫法呀!!!, 你他喵的快給我去自己揹著打一遍去!快點滴!!!
相關文章
- 二叉樹的遍歷二叉樹
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 完全二叉樹的遍歷二叉樹
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- 二叉樹的遍歷筆記二叉樹筆記
- 二叉樹的遍歷實現二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的按層遍歷二叉樹
- 二叉樹的建立、遍歷、廣義錶轉換二叉樹
- 迴圈遍歷二叉樹二叉樹
- 二叉樹四種遍歷二叉樹
- 6.14-二叉樹遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 二叉樹排序樹的建立,遍歷和刪除二叉樹排序
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 玩轉二叉樹二叉樹
- 二叉樹的遍歷 (迭代法)二叉樹
- 二叉樹的遍歷及應用二叉樹
- 144. 二叉樹的前序遍歷二叉樹
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹遍歷方法總結二叉樹
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- WeetCode4 —— 二叉樹遍歷與樹型DP二叉樹
- Leetcode——144. 二叉樹的前序遍歷LeetCode二叉樹
- [LintCode]BinaryTreeLevelOrderTraversal(二叉樹的層次遍歷)二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的前中後序遍歷二叉樹
- 從上到下遍歷二叉樹-Java二叉樹Java