考點:用先序遍歷和中序遍歷查詢二叉樹的高度
給定乙個二叉查詢樹,要求計算其高度,每個二叉查詢樹將給出先序與中序的遍歷。
例如:乙個二叉查詢樹其先序遍歷為: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...