Codeup《演算法筆記》9.2小節——資料結構專題(2)->二叉樹的遍歷->二叉樹
Problem B: 二叉樹
[Creator : Imported]
Time Limit : 1.000 sec Memory Limit : 32 MB
Description
如上所示,由正整數1,2,3……組成了一顆特殊二叉樹。我們已知這個二叉樹的最後一個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。
比如,n = 12,m = 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹中共有4個結點。
Input
輸入資料包括多行,每行給出一組測試資料,包括兩個整數m,n (1 <= m <= n <= 1000000000)。最後一組測試資料中包括兩個0,表示輸入的結束,這組資料不用處理。
Output
對於每一組測試資料,輸出一行,該行包含一個整數,給出結點m所在子樹中包括的結點的數目。
Sample Input Copy
3 7
142 6574
2 754
0 0
Sample Output Copy
3
63
498
思路分析:
題目的意思是說給兩個數字,一個代表二叉樹的結點總數,一個是指定的結點位置,求指定結點的所有孩子結點個數
直接迴圈找到二叉樹的深度和指定節點所在深度,每次疊加2的遞增次方,直到次方為相差的深度,最後根據給定節點的最底層左邊的結點來判斷最後一層是加還是不加,加的話加多少。
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int index[31];
int main()
{
int m,n;
for(int i=0;i<31;i++){
index[i]=pow(2,i);
}
while(scanf("%d%d",&m,&n)!=EOF){
if(m==0 && n==0) break;
int i,j;
int sum=0;
for(i=1;;i++){
if(n<=pow(2,i)-1) break;
}
for(j=1;;j++){
if(m<=pow(2,j)-1) break;
}//i>=j;
int k;
for( k=0;k<i-j;k++){
sum+=index[k];
m*=2;
}
if(n>=m){
if(n-m+1<index[k]) {
sum+=n-m+1;
}
else{
sum+=index[k];
}
}
cout<<sum<<endl;
}
return 0;
}
/**************************************************************
Problem: 1905
User: Jccober
Language: C++
Result: Accepted
Time:1 ms
Memory:1896 kb
****************************************************************/
相關文章
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 資料結構 二叉樹遍歷資料結構二叉樹
- 資料結構之遍歷二叉樹資料結構二叉樹
- 資料結構與演算法-二叉樹遍歷資料結構演算法二叉樹
- 二叉樹的遍歷筆記二叉樹筆記
- 【資料結構&演算法】11-樹基礎&二叉樹遍歷資料結構演算法二叉樹
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- 實戰資料結構(11)_二叉樹的遍歷資料結構二叉樹
- 資料結構-二叉樹的儲存結構與遍歷資料結構二叉樹
- 【筆記】遍歷二叉樹的應用筆記二叉樹
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 樹(2)--二叉樹的遍歷(非遞迴)+線索二叉樹二叉樹遞迴
- 二叉樹---遍歷二叉樹
- 二叉樹遍歷二叉樹
- 二叉樹的遍歷二叉樹
- 演算法根據樹的前序遍歷構建二叉樹演算法二叉樹
- 【資料結構】二叉樹遍歷(遞迴+非遞迴)資料結構二叉樹遞迴
- python資料結構之二叉樹遍歷的實現Python資料結構二叉樹
- 二叉樹遍歷順序與方法小結二叉樹
- 二叉樹的構造與遍歷二叉樹
- 二叉樹遍歷方法總結二叉樹
- 資料結構(樹):二叉樹資料結構二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java
- JAVA遍歷二叉樹Java二叉樹
- 完全二叉樹的遍歷二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 資料結構實驗:二叉樹的遍歷(C語言版)資料結構二叉樹C語言
- 遍歷結果推導二叉樹二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 二叉樹的遍歷及常用演算法二叉樹演算法
- LintCode 前序遍歷和中序遍歷樹構造二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 資料結構-二叉樹資料結構二叉樹