分析:使用兩個棧來存放節點元素,棧1用來存放未遍歷過的節點,棧2用來存放遍歷的節點。
具體步驟:
(1)把第乙個節點壓進棧1。見圖(a)
(2)把棧1中的棧頂節點彈出,壓進棧2;若棧1為空,且被彈出節點有子節點,則把被彈出節點的子節點按從右到左的順序壓進棧1。見圖(b)
(3)重複步驟2,直至棧1為空。見圖(c)~圖(h)
(4)至此,遍歷過程結束。遍歷順序就是棧2中節點的入棧順序。
#include
#include
using
namespace
std;
struct node
;void dfs(int a, int size)
else
// 右子節點
child++;
if(child < size)
else
}// 先把第0個節點加到unvisited棧中
unvisited.push(&nodes[0]);
while (!unvisited.empty())
if(null != current->left)
visited.push(current);
cout
<< current->data << " ";
}}int main(int argc, const
char * argv)
; int size = sizeof(a)/sizeof(int);
dfs(a, size);
return
0;}
執行結果:
0 1 3 4 2 5 6
深度優先遍歷二叉樹
3 深度優先遍歷二叉樹。include include include typedef struct treenode 樹節點結構體定義 treenode insertsbonmyleft treenode sb treenode insertsbonmyright treenode sb char...
二叉樹深度優先遍歷
在二叉樹的深度優先遍歷中分為前序遍歷 中序遍歷和後序遍歷,其中根據前序遍歷和中序遍歷或後序遍歷和中序遍歷可以推算出完整的二叉樹。三種遍歷方式為 前序遍歷 根節點 左子樹 右子樹 中序遍歷 左子樹 根節點 右子樹 後序遍歷 左子樹 右子樹 根節點 由上述三種遍歷方式可知中序遍歷最為重要,因為中序遍歷可...
二叉樹的深度優先遍歷
歡迎指正 今天繼續樹的遍歷。這裡要說的是 二叉樹的 深度優先遍歷。深度優先遍歷 從根結點開始,先遍歷根的左子樹,再遍歷根右子樹。以此類推輸出結果。如下圖 深度優先結果 5 3 1 4 7 9 分析 1 先將5入棧,此時棧中只有5乙個元素。2 將佔棧中的5彈棧,在將其右孩子7壓棧,此時棧中只有7乙個元...