資料結構快速回顧 二叉樹 解冪子集問題

2021-09-06 16:14:38 字數 916 閱讀 8944

回溯法是設計遞迴的一種常用方法,它的求解過程實質上就是乙個先序遍歷一棵"狀態樹"的過程,只是這棵樹不是遍歷前預先建立的而是隱含在遍歷過程中的。

下面舉乙個例子:求含n個元素的集的冪集:

集合a=, , , , ,,,{}}; //{}表示空集合

從集合a的每乙個元素的角度看,它只有兩種狀態:或者是屬於冪集的元素集,或不屬於冪集元素集,則求冪集的過程就可以看成是依次對集合a中的元素進行"取","舍"的過程,並且可以用二叉樹來表示過程中冪集的變化狀態。

解題思路:求冪集的過程可看成是依次對集合a中的元素進行取或舍的過程。

1.選擇合適的資料結構——假設以線性表表示集合。

2.樹根結點表示冪集元素的初始狀態(空集),葉子結點表示終結狀態(冪集的元素),第i層表示已對前i-1個元素進行了取捨的當前狀態

下面是**:

1 #include 2 #include 3

4using

namespace

std;56

//輸出集合元素

7void printset(listp)

819 cout<<"\n"

<20}

21}

2223

//求包含n個元素的集合a 的冪集

24//

a是原始集合 b是集合a的冪集中某個集合

25//

假設集合a中前i-1個元素已經決定了取捨

26//

現在對第i個元素進行取捨處理;如果i>n 說明已經完成的最後元素的選擇,輸出

27void getpowerset(int i,list a,list &b)

2844

} 45

46int main(int argc,char*argv)

47

資料結構 回顧二叉樹

1.為什麼會有樹?因為當有大量的輸入資料時,鍊錶的線性訪問時間就顯得略長了。而樹結構,其大部分操作的執行時間平均為o logn 2.樹的實現並不難,幾行 就搞定了。struct treenode 3.遍歷形式 中序遍歷二叉樹 void inorder tree pointer ptr 前序遍歷二叉樹...

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...