資料結構 樹的廣度遍歷

2021-09-26 07:45:44 字數 1261 閱讀 9558

資料結構中數是一種常見的資料組織方式,在許多的應用場景**現出來了,比如說乙個公司的boss、總經理、副總經理、專案組長、專案組的組員,他們之間的關係就是一種樹型結構,乙個boss下關**經理,總經理關聯多個副總經理,副總經理關聯多個專案組長,專案組長關聯多個組員。我們該如何去獲取某乙個員工的所有下級員工呢?比如:通過專案經理直接就可以獲取到關聯的專案組長以及專案組長下的組員。

這樣就需要對於樹進行遍歷。遍歷又可以分為廣度遍歷和深度遍歷。

廣度遍歷就是按層進行遍歷,針對於下面這個樹,其廣度遍歷的輸出結果為:fceadhgbm,按層遍歷就是先輸出一次層,第一層輸出完畢以後第二層,第二層完成後進行第三層的輸出,以此類推,直到最後一層,樹的廣度遍歷就結束了。

實現的思路,可以通過迴圈的遞迴實現,通過迴圈實現的話,需要借助佇列。

具體的流程:將根節點f放入到佇列中

將f的左孩子和右孩子加入佇列,f出佇列。

然後從佇列中獲取到出隊的元素,目前佇列出隊的元素是c,則將c的左右孩子加入佇列,c出佇列。

接下來,e入隊,h和g加入佇列,然後e出隊。

以此類推,直到佇列中沒有元素,則樹遍歷完成

具體**實現

public class test 

}//定義樹的節點,left為該節點的左孩子,right為該節點的右孩子。value為該節點的內容

class node

public void addleft(node left)

public void addright(node right)

//用來列印某個節點下的所有子節點

/*使用arraylist作為佇列,元素沒有真正的出隊,只不過是通過index變數,使index下標後移,可以將index之前的元素看作是已經出隊的元素,index為佇列的出隊元素,index後面的元素看作是佇列中的元素

所以當index大於佇列的長度時,說明佇列中已經沒有元素了,這時候樹的所有節點就遍歷完成了。

*/ public static void print(node node)

if(node.right!=null)

index++;

if(index>=queue.size())

node = queue.get(index);

}for (node node1 : queue) }}

資料結構 二叉樹 廣度遍歷(層次)

力扣題目 102.二叉樹的層序遍歷 107.二叉樹的層次遍歷ii 199.二叉樹的右檢視 637.二叉樹的層平均值 429.n叉樹的層序遍歷 102.二叉樹的層序遍歷 1.用佇列去裝 先入根節點 2.當前層出隊,並把左右節點入隊 3.重複二,直到佇列空 class solution answer.p...

資料結構 樹的遍歷

以前序遍歷為例 1 先遍歷樹根 2 然後前序遍歷左子樹 3 最後前序遍歷右子樹 對於這樣的乙個二叉樹 前序遍歷結果 abdegcf 遍歷流程 首先遍歷樹根,輸出a 對a的左子樹進行前序遍歷,怎麼前序遍歷?對於b這個左子樹而言,首先遍歷根節點,輸出b 然後遍歷子樹b的左子樹,得到d這個子樹,對d進行前...

資料結構 樹的遍歷(遞迴遍歷)

樹的遍歷 遞迴遍歷 include include include typedef struct treenodetreenode,treenodepointer 先序遍歷 void printroot treenodepointer root 中序遍歷 void printroot2 treeno...