400,二叉樹的鋸齒形層次遍歷

2022-09-18 09:45:18 字數 2266 閱讀 3320

今天來看一道比較簡單的題,給定乙個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。

例如:

給定二叉樹 [3,9,20,null,null,15,7]

返回鋸齒形層次遍歷如下:

[3],

[20,9],

[15,7]

bfs列印二叉樹的的層次遍歷就是一層一層的遍歷,也就是我們俗稱的bfs(寬度優先搜尋演算法(又稱廣度優先搜尋)),之前在373,資料結構-6,樹中講過樹的寬度優先搜尋,最簡單的方式就是使用佇列。但這題列印的時候多了乙個條件,就是不能一直從乙個方向列印,要先從左邊列印然後再從右邊列印……,就這樣交替進行,所以這裡要有個變數來判斷是從左往右還是從右往左列印,**比較簡單,我們來看下。

public list

>

zigzaglevelorder

(treenode root)

else

//左右子節點如果不為空會被加入到佇列中

if(node.left != null)

queue.

add(node.left);if

(node.right != null)

queue.

add(node.right);}

res.

add(level)

; lefttoright =

!lefttoright;

}return res;

}

上面**中如果把第17-21行的**直接換成第18行的**就是我們之前講過的bfs,就是一層一層往下列印。只不過這裡多了乙個條件的判斷。

當然我們還可以根據每一層是第幾層來判斷,如果根節點是第1層的話,那麼我們在層數是奇數的時候從左往右列印,如果層數是偶數的時候從右往左列印。在前面我們講佇列的時候359,資料結構-3,佇列我們講到了雙端佇列,就是乙個可以在兩邊同時新增和刪除的佇列。這裡我們使用上面兩種方式的結合,來看下**。

public list

>

zigzaglevelorder

(treenode root)

else

level.

add(cur.val);}

res.

add(level);}

return res;

}

dfs列印這題除了使用bfs以外,我們還可以使用dfs。但這裡我們要有個判斷,如果走到下一層的時候集合沒有建立,我們要先建立下一層的集合,**也很簡單,我們來看下。

public list

>

zigzaglevelorder

(treenode root)

private

void

tr**el

(treenode cur, list

> res,

int level)

//遍歷到第幾層我們就操作第幾層的資料

list

list = res.

get(level)

;//這裡預設根節點是第0層,偶數層相當於從左往右遍歷,

// 所以要新增到集合的末尾,如果是奇數層相當於從右往左遍歷,

// 要把資料新增到集合的開頭

if(level %2==

0)list.

add(cur.val)

;else

list.

add(

0, cur.val)

;//分別遍歷左右兩個子節點,到下一層了,所以層數要加1

tr**el

(cur.left, res, level +1)

;tr**el

(cur.right, res, level +1)

;}

總結這題最簡單的一種方式就是參照二叉樹的bfs列印,然後稍作修改,如果當前行是從左往右列印,那麼下一行就從右往左列印。如果當前行是從右往左列印,那麼下一行就從左往右列印,**基本上沒什麼難度。

二叉樹的鋸齒形層次遍歷

給定乙個二叉樹,返回其節點值的鋸齒形層次遍歷。即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回鋸齒形層次遍歷如下 3 20,9 15,7 解題思路 鋸齒形層次遍歷,又不單單是層次遍歷,一次從...

二叉樹的鋸齒形層次遍歷

給定乙個二叉樹,返回其節點值的鋸齒形層次遍歷。即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 複製 返回鋸齒形層次遍歷如下 3 20,9 15,7 複製 definition for a bi...

二叉樹的鋸齒形層次遍歷

給定乙個二叉樹,返回其節點值的鋸齒形層次遍歷。即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回鋸齒形層次遍歷如下 3 20,9 15,7 分析 鋸齒型的意思就是,第一層順序,第二層逆序,第三...