樹的深度遍歷和廣度遍歷

2021-09-27 03:38:50 字數 1536 閱讀 6303

樹的前序、中序、後序遍歷本質上都可以認為是深度遍歷。

那樹的層序遍歷是什麼?

總之先寫一下樹的前序遍歷的遞迴寫法和迭**法。

// 遞迴寫法

public

class

solution

list.

add(node.val);if

(node.left != null)

if(node.right != null)

return list;

}}

非遞迴寫法就是主動申請乙個棧,來實現遞迴棧的效果。需要注意的是入棧的順序,棧先進後出filo。

public

class

solution1

stack.

push

(node)

;while

(!stack.

isempty()

)if(tmp.right != null)

}return list;

}}

中序遍歷:

遞迴寫法:

class

solution

if(root.left != null)

list.

add(root.val);if

(root.right != null)

return list;

}}

非遞迴寫法:

public

class

solution

stack.

add(root)

;while

(!stack.

isempty()

)if(node.right != null)

}return list;

}}

層序遍歷

就是一層一層的遍歷整個樹

遞迴寫法:

class

solution

list.

get(layer)

.add

(node.val);if

(node.left != null)

if(node.right != null)

}public list

>

levelorder

(treenode root)

helper

(list,root,0)

;return list;

}}

非遞迴寫法:

class

solution

queue.

add(root)

;int level =0;

while

(!queue.

isempty()

)if(node.right != null)

} level++;}

}}

深度遍歷和廣度遍歷

圖的遍歷,所謂遍歷,即是對結點的訪問。乙個圖有那麼多個結點,如何遍歷這些結點,需要特定策略,一般有兩種訪問策略 深度優先遍歷,從初始訪問結點出發,我們知道初始訪問結點可能有多個鄰接結點,深度優先遍歷的策略就是首先訪問第乙個鄰接結點,然後再以這個被訪問的鄰接結點作為初始結點,訪問它的第乙個鄰接結點。總...

樹的遍歷 深度優先遍歷和廣度優先遍歷

廣度優先遍歷,類似於樹的按層次遍歷。設圖g是連通的,且圖g的初態是所有頂點均未被訪問過。從圖g的任一頂點vi出發按廣度優先搜尋遍歷圖的步驟是 訪問vi後,依次訪問與vi鄰接的所有頂點w1,w2,w3.wn,再按w1,w2,w3.wn的順序訪問其中每個頂點的所有未被訪問的鄰接點,再按此順序,依次訪問它...

深度遍歷和廣度遍歷(函式)

mgraph是鄰接矩陣儲存的圖,定義如下 define maxvertexnum 10 定義最大頂點數 typedef int vertex 用頂點下標表示頂點,為整型 typedef struct mgraph 用鄰接矩陣表示的圖的型別 裁判測試程式樣例 include stdio.h inclu...