一、二叉樹介紹點這片文章
二叉樹及題目介紹
例題:有一顆滿二叉樹,每個節點是乙個開關,初始全是關閉的,小球從頂點落下,
小球每次經過開關就會把它的狀態置反,這個開關為關時,小球左跑,為開時右跑。現在問第k個球下落到d層時的開關編號。輸入深度d和小球個數k
思路分析:首先該題最先想到的是模擬,開乙個陣列表示開關,下標表示編號,根據k的子樹為2k和2k+1來改變陣列,判斷進行。但是這樣太麻煩了。而且根據深度和小球個數,導致計算量太大。
尋找規律:
可以知道每一層,第奇數個落入該層的球都是往左,第偶數個落入該層的球都是往右。
小球按照編號依次下落的,對於左枝(也就是奇數球),每個i號小球落入該層都是第(k+1)/2個小球。而偶數是往右走的k/2個小球
所以採取每一次乙個迴圈,來判斷k%2小球往哪兒走,迴圈d層,即可找出最後葉子!省去大陣列和大時間
pytho實現
def bin_tree(x,floor):
num = x
location = 1 #設定初始位置第一層第乙個
for f in range(1, floor):
if num%2: #只要是奇數就往左邊走
num = (num + 1)/2 #每個位置會經過的小球重新編號
location = 2*location #左邊的就是location的2倍
else:
num = num/2
location = 2*location + 1 #右邊為location 2倍➕1
print(location)
bin_tree(5, 6)
#結果為24
91836
二叉樹,完全二叉樹,滿二叉樹
二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...
二叉樹 滿二叉樹和完全二叉樹
二叉樹是一種很重要的非線性資料結構,它是樹結構的一種重要的型別 它不是樹結構的特殊情況 其特徵是每個節點最多有兩個子樹。二叉樹的特點 二叉樹每個結點最多有 2個子結點,樹則無此限制 二叉樹中 結點的子樹 分成左子樹和右子樹,即使某結點只有一棵子樹,也要指明該子樹是左子樹,還是右子樹,就是說 二叉樹是...
二叉樹 滿二叉樹與完全二叉樹
二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...