天梯賽 L2 011 玩轉二叉樹 資料結構

2021-07-14 14:50:34 字數 1127 閱讀 1480

題目:

題意:給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。

輸入格式:

輸入第一行給出乙個正整數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 using namespace std;

const int n = 50;

int n;

int arr[n], brr[n];

struct node

node(int data, node *lc, node *rc):data(data), lc(lc), rc(rc) {}

};void dfs(int l, int r, int t, node* &root)

if(flag == -1) return; //沒找到,說明資料不合法,題目不會出現這種情況

root = new node(arr[flag], null, null);

if(flag > l) //左子樹不為空,遞迴進入

dfs(l, flag - 1, t + 1, root -> lc);

if(flag < r) //右子樹不為空,遞迴進入

dfs(flag + 1, r, t + 1 + flag - l, root -> rc);

}void bfs(node *r)

for(int i = 0; i < k; i++)

printf("%d%c", crr[i], i == k - 1 ? '\n': ' ');

}int main()

L2 011 玩轉二叉樹

給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出其前序遍歷序列。數字間以空...

L2 011 玩轉二叉樹

給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出其前序遍歷序列。數字間以空...

L2 011 玩轉二叉樹

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入格式 ...