二叉樹演算法基本和遞迴有關,前中後序演算法就不提了,主要看一下深度優先遍歷和廣度優先遍歷。實現這2種遍歷需要借助棧或者佇列來儲存中間結果,原因是遍歷過程出現了回溯。
1//筆試題:廣度遍歷二叉樹、深度遍歷二叉樹
23 #include4 #include5 #include6
7using
namespace
std;89
struct
node
12void visit()
13 node* left,*right;
14};
1516
//構造乙個二叉樹
17void buildtree(node*root)
1825
26//
廣度優先遍歷樹
2728 queueqnode;
2930
void breadthfirstvisit(node*root)
3141}42
43//
深度優先遍歷樹
4445 stacksnode;
4647
void
dumpstack()
4857 cout<59void deepfirstvisit(node*root)
6073}74
intmain()
75
總結一下,至少對於命令式程式設計來說,思考問題的時候要從計算機的角度,而不是直觀的認識看問題,才能發現要解決的問題的實質。
二叉樹層次遍歷 廣度遍歷和深度遍歷
問題 二叉樹層次遍歷 問題描述 給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例子 給定二叉樹 3,9,20,null,null,15,7 3 920 157返回其層次遍歷結果 3 9 20 15,7 思路 廣度遍歷和深度遍歷。與一般的廣度遍歷不同的是,每次遍歷都將que...
對稱二叉樹 深度遍歷與廣度遍歷
問題 對稱二叉樹 問題描述 給定乙個二叉樹,檢查它是否是映象對稱的。比如,下面這個二叉樹是映象對稱的 1 2 2 3 4 4 3 而這個二叉樹則不是映象對稱的。1 2 2 3 3例子 輸入 1,2,2,3,4,4,3 輸出 true 思路 映象對稱意味著左子樹與右子樹映象對稱,在遍歷左子樹或者右子樹...
廣度優先遍歷二叉樹
同學電面被問到乙個問題 如何獲得完全二叉樹的最後乙個節點?二叉樹以鍊錶的形式儲存。沒想到合適的辦法,用廣度遍歷吧,最後乙個節點就是了,如下 include include 樹節點的定義 struct tnode 佇列節點的定義 struct qnode 佇列的定義 struct queue 初始化佇...