sicily 1003 計算二叉查詢樹的高度

2021-07-25 17:22:10 字數 1264 閱讀 3269

考點:用先序遍歷和中序遍歷查詢二叉樹的高度

給定乙個二叉查詢樹,要求計算其高度,每個二叉查詢樹將給出先序與中序的遍歷。

例如:乙個二叉查詢樹其先序遍歷為:16, 10, 4, 15, 23 ; 中序遍歷為 4, 10, 15, 16, 23,則其高度為2(假定空樹高度為-1,只有根節點的數高度為0)

第一行輸入測試用例個數。

對於每個測試用例,

第一行是節點個數n,第二行是key值的先序遍歷,第三行是key值的中序遍歷

對於每個測試用例,用一行輸出樹的高度

copy sample input to clipboard

2 3

4 5 6

4 5 6

5 6 4 8 9 10

4 6 8 9 102 3

1.最直觀的思路:建樹,然後遞迴搜尋查詢樹的高度。

2.不建樹,而通過已知的先序、中序從而知道每一層二叉樹的下一層是什麼,然後統計層數。

思路1是能馬上想到的, 思路2比較難想,而且想到跟尋找下一層跟統計層數混在一起寫,可能比較難寫。故用了思路1。

#include 

#include

#include

using

namespace

std;

vector

preorder;

vector

inorder;

int getpos(int val, const

vector

& v)

return -1;

}struct node

};int getheight(node* root) else

if (root->left == null && root->right != null) else

if (root->left != null && root->right == null) else

}node* buildtree(int rootarr, int inorderposbegin, int inorderposend) else

}int main()

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

node* head = buildtree(0, 0, inorder.size());

cout

<< getheight(head) - 1

<< endl;

} return

0;}

Sicily 1935 二叉樹重建

1935.二叉樹重建 constraints time limit 1 secs,memory limit 32 mb description 對於二叉樹t,可以遞迴定義它的先序遍歷 中序遍歷和後序遍歷如下 preorder t t的根節點 preorder t的左子樹 preorder t的右子樹...

Sicily 1935 二叉樹重建

題目要求說的很清楚,給出乙個數的先序和中序遍歷結果,構建樹並按照廣度優先輸出。先序遍歷的第乙個數即為根節點,在中序遍歷中找到之後它左面的都是左子孫結點右邊同理。problem 1935 submission 3291146 the source code is licensed under crea...

Sicily 1935 二叉樹重建

time limit 1 secs,memory limit 32 mb 對於二叉樹t,可以遞迴定義它的先序遍歷 中序遍歷和後序遍歷如下 preorder t t的根節點 preorder t的左子樹 preorder t的右子樹 inorder t inorder t的左子樹 t的根節點 inor...