如上所示,由正整數1,2,3……組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。 比如,n = 12,m = 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹中共有4個結點。
輸入資料報括多行,每行給出一組測試資料,包括兩個整數m,n (1 <= m <= n <= 1000000000)。
對於每一組測試資料,輸出一行,該行包含乙個整數,給出結點m所在子樹中包括的結點的數目。示例1
3 120 0
4求m的字數 == 自己 + 左子樹(小弟)的個數 + 右子樹(小弟)的個數
第一層:2^0個
第二次:2^1個
第三次:2^2個
第n層:2^(n - 1 )個
#include #include using namespace std;
int n; // 結尾
int m; // 我的m
int level = 0; // n處在第幾層
int a,b; //最後一層左右
int getres(int m) else if (m >= a && a <= b) else
}void setlevel() }}
int main()
}
二叉樹子樹的刪除
package 二叉樹子樹的刪除 public class binarytree public treenode getroot 前序 public void frontshow else 中序 public void midshow else 後序 public void aftershow el...
n節點組成二叉樹的個數
可以分析,當n 1時,只有1個根節點,則只能組成1種形態的二叉樹,令n個節點可組成的二叉樹數量表示為h n 則h 1 1 h 0 0 當n 2時,1個根節點固定,還有2 1個節點。這乙個節點可以分成 1,0 0,1 兩組。即左邊放1個,右邊放0個 或者左邊放0個,右邊放1個。即 h 2 h 0 h ...
二叉樹和最大的子樹
問題描述 給乙個二叉樹,每個節點都是正或負整數,如何找到乙個子樹,它所有節點的和最大?思路 採用自底向上的計算。先計算左右子樹總和值,用左右子樹的總和加上當前節點值,如果當前總和大於最大值,則更新最大值,同時將最大子樹根節點更新為當前根。簡單說,就是後序遍歷。cpp view plain copy ...