二叉樹 給定n,求子樹包含的節點(遞迴)

2021-10-03 15:57:07 字數 814 閱讀 9876

如上所示,由正整數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 12

0 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 ...