題目:
有一顆二叉樹,最大深度為d,且所有葉子的深度都相同。所有節點從上到下從左到右編號為1,2,3,...,2^d-1。
在節點1處放置乙個小球,它會往下落。每個內節點上都有乙個開關,初始全都關閉,當每次有小球落到乙個開關上時,
他的狀態都會改變。當小球到達乙個內節點時,如果該節點上的開關關閉,則往左走,否則往右走,直到走到葉子節點。
如圖:
現在有一些小球從節點1處一次開始下落,最後乙個小球將會落在**呢?輸入葉子深度d和小球個數num,輸出第num個小球最後所在的葉子編號。
假設num不超過整棵樹的葉子個數,d<=20,最多輸入包含1000組資料。
樣例輸入:
4 23 4
16 12345
樣例輸出:127
36358
分析:
* 1,利用二叉樹的特性,乙個節點k的左子節點是2k,右子節點是2k+1。
* 2,num不超過整棵樹的葉子個數,即num要小於二叉樹的節點樹,滿二叉樹的節點數是:2^層數-1
#include #includeusing namespace std;
const int maxn=20;
int s[1<>d>>i)
{int k=1;
for(int i=0;i
小球下落(二叉樹)
有一棵二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從上到下從左到右編號為1,2,3,2 d 1。在結點1處放乙個小球,它會往下落。每個內結點上都有乙個開關,初始全部關閉,當每次有小球落到乙個開關上時,它的狀態都會改變。當小球到達乙個內結點時,如果該結點上的開關關閉,則往左走,否者往右走,直...
小球下落 (二叉樹的應用)
有一棵二叉樹,最大深度為d,且所有葉子的深度都相同。所有結點從上到下從左到右編號為1,2,3,2 d 1。在結點1處放乙個小球,它會往下落。每個內結點上都有乙個開關,初始全部關閉,當每次有小球落到乙個開關上時,它的狀態都會改變。當小球到達乙個內結點時,如果該結點上的開關關閉,則往左走,否者往右走,直...
二叉樹的編號優化 小球下落
參考 演算法競賽入門經典 每個小球都會落在根節點上,因此前兩個小球必然是乙個在左子樹,乙個在右子樹。一般,只需要知道小球編號的奇偶性,就能知道它是最終在哪棵子樹中。對於那些落入根結點左子樹來說,只需知道該小球是第幾個落在根的左子樹里的,就可以知道它下一步該往左還是往右了。以此類推,直到小球落到葉子結...