演算法導論9 1 1習題解答 二叉樹

2021-09-06 02:57:35 字數 1757 閱讀 9243

clrs 9.1-1 :

演算法思想:

1.將陣列中的元素分組,每組兩個元素,然後比較每組中的兩個元素得到最小值,重新得到包含原來一半元素的陣列,繼續重複上述過程,那麼最後乙個元素必然為最小值。如圖所示,陣列為

2.上述過程形成的是乙個二叉樹,其中葉子節點都為陣列元素,非葉子節點剛好4個,這是二叉樹的性質。

3.然後我們來找第二小元素,第二小元素必然跟著1,首先賦值為5,然後再賦值為3, 然後賦值為2,即為所求。

ps:本章討論的元素都互異,不存在相同值(見原書)

#include

<

iostream

>

using 

namespace

std;

class

node

;class

binarytree

;int

main();//

葉子節點

node

**node

=new

node*[

10];

for(

inti =0

; i

<

10; i++)

node[i]

=new

node(arr[i]);

binarytree

*bi_tree

=new

binarytree();

bi_tree

->

create_tree(node,

10);

cout

<<

bi_tree

->

root

->

data

<<

endl;

cout

<<

bi_tree

->

search_second_small()

<<

endl;

return 0;

}node::node()

node::node(

intd)

void

binarytree::create_tree(node

**node,

intlen)

else

new_node[new_len -1

] =node[len -1

];}//new_node元素個數為偶數

else

}create_tree(new_node, new_len);

delete new_node;}}

intbinarytree::min(

inta,

intb)

intbinarytree::search_second_small()

else 

if(p

->

data ==p

->

right

->

data

&&second

>

p->

left

->

data)

else

return

second;

}return

second;

}binarytree::binarytree()

演算法導論習題解答 2 3 7

2.3 7 請給出乙個執行為 nlgn 的演算法 偽碼 使之能在給定乙個由n 個整數構成的集合s 和另乙個整數x 時,判斷出s 中是否存在有兩個其和等於x 的元素。解 解題思路 先對集合s進行歸併排序,然後新建乙個陣列s1,使得s1 i x s i 再將兩個陣列並起來。如果在並的過程中發現有兩個元素...

演算法導論6 5 7習題解答

clrs 6.5 7 heap delete a,i 操作將結點i中的項從堆a中刪去。對含n個元素的最大堆,請給出時間為o lgn 的heap delete的實現。演算法思想 對即將被刪的i處的元素設定為堆中末尾的元素,同時堆的大小減1.此題同時附帶6.2 5的解答 如下 1 include 2 u...

演算法導論12 2節習題解答

clrs 12.2 1 c錯,240及240之後的節點應該都為911左子樹上的節點,那麼所有節點必然小於或等於911,但點912明顯違反了。clrs 12.2 2 search minimum x if left x nil search minimum left x return x search...