二叉樹之小球下落

2021-06-20 06:38:19 字數 784 閱讀 3820

題目:

有一顆二叉樹,最大深度為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處放乙個小球,它會往下落。每個內結點上都有乙個開關,初始全部關閉,當每次有小球落到乙個開關上時,它的狀態都會改變。當小球到達乙個內結點時,如果該結點上的開關關閉,則往左走,否者往右走,直...

二叉樹的編號優化 小球下落

參考 演算法競賽入門經典 每個小球都會落在根節點上,因此前兩個小球必然是乙個在左子樹,乙個在右子樹。一般,只需要知道小球編號的奇偶性,就能知道它是最終在哪棵子樹中。對於那些落入根結點左子樹來說,只需知道該小球是第幾個落在根的左子樹里的,就可以知道它下一步該往左還是往右了。以此類推,直到小球落到葉子結...