Dropping Balls UVA - 679(二叉樹的遍歷)
阿新 • • 發佈:2019-02-01
題目 net ima 二叉樹的遍歷 int problem 小球 spa bre
題目鏈接:https://vjudge.net/problem/UVA-679
題目大意:t組樣例,每組包括D M 層數是D 問第M個小球落在哪個葉子節點? 每個節點有開關 剛開始全都是關閉的,小球走到節點 節點開關變為與當前相反 每個小球從根節點釋放
思路:這題是第一道二叉樹遍歷的題目,二叉樹暴力模擬的確可以求出答案 ,但是很不幸,會超時
然後另一種方法,只需要求第M次小球就行了! 怎麽求呢? 試想一下,如果M為奇數 那麽從根節點開始看,肯定是往左走(M+1)/2次 往右走M/2次 但是最後一次肯定是往左走的
同理,如果M是偶數 顯然 往左走M/2次 往右走 M/2次 顯然最後一次是往右走的 這就是做這題的思想了 然後往復此過程 !
看代碼:
#include<iostream> using namespace std; int main() { int t; int n,m; while(cin>>t) { if(t==-1) break; while(t--) { int ans=1; cin>>n>>m; for(int i=1;i<n;i++)// { if(m%2==1) //最後一次肯定往左子樹走 且走的次數為(m+1)/2 { m=(m+1)/2; ans=ans<<1; } else//往右子樹走 { m=m/2; ans=ans<<1|1; } } cout<<ans<<endl; } }return 0; }
Dropping Balls UVA - 679(二叉樹的遍歷)