leetcode 特定深度節點鍊錶

2022-07-07 06:57:10 字數 1466 閱讀 6040

給定一顆二叉樹,設計乙個演算法,建立含有某一深度上所有節點的鍊錶(比如,若一顆樹的深度為 d,則會建立出 d 個鍊錶)。返回乙個包含所有深度的鍊錶的陣列。

這道題使用層次遍歷對二叉樹進行遍歷,在遍歷過程中確定節點屬於哪一層,將同一層的節點放在同乙個鍊錶下即可。

在做這道題的時候,我在處理節點層級這個點上處理的不太好。一開始,我構建乙個類來儲存節點的層次資訊,這個類中包含樹節點和該節點的層級。

class

depthtreenode

}

這種方式都極大影響了儲存和執行時間,在進行層次遍歷時,需要為每乙個節點建立乙個 depthtreenode ,然後再將節點儲存層次遍歷所用到的輔助結構佇列當中,從佇列中取出節點進行操作的時候,同樣還要取出 depthtreenode 中的 treenode ,相當於包了層盒子只為了儲存層次資訊,造成巨大的浪費。

後來看了乙個題解,使用乙個變數(size)記錄正在處理的層一共有多少個節點。根據層次遍歷的實現特點,每次處理乙個節點時,會加入它的子節點。當上一層(n-1)的節點全部處理完之後,佇列中剩餘的節點都為同一層(n)的節點,也就是說,此時佇列中的節點數量就是第 n 層節點的個數(size),那麼使用 size 來控制接下來處理的節點的個數就能保證處理的都是第 n 層的節點了。

還有兩個細節需要注意。

1. 含有所有深度的鍊錶的陣列的長度怎麼確定?

你可以先對二叉樹進行遍歷,獲得二叉樹的深度,然後確定陣列的長度。

或者一開始可以並不考慮長度問題,使用 arraylist 進行儲存,最後再使用陣列進行儲存。

2. 同一深度的鍊錶在處理時要不要再首部新增乙個輔助的空的 listnode?

這是題解裡面的做法,其實不新增也可以。新增的話在**實現方面,處理節點層級上會更有條理。當換到新一層時,可以集中於處理鍊錶的轉換問題,當遇到同一層的新節點時,可以集中於處理節點連線的問題。

**如下:

/**

* definition for a binary tree node.

* public class treenode

* } */

/*** definition for singly-linked list.

* public class listnode

* } */

class

solution

else

}listnode res = new

listnode[list.size()];

int j = 0;

for(listnode node : list)

return

res;}}

面試題 04 03 特定深度節點鍊錶 DFS

面試題 04.03.特定深度節點鍊錶 dfs 給定一棵二叉樹,設計乙個演算法,建立含有某一深度上所有節點的鍊錶 比如,若一棵樹的深度為 d,則會建立出 d 個鍊錶 返回乙個包含所有深度的鍊錶的陣列。示例 輸入 1,2,3,4,5,null,7,8 1 2 3 4 5 7 8輸出 1 2,3 4,5,...

力扣 面試題 04 03 特定深度節點鍊錶

原題鏈結 樹及鍊錶定義如下 definition for a binary tree node.struct treenode definition for singly linked list.struct listnode 本題即為二叉樹層序遍歷的乙個變體,只是將返回由vector 變為vect...

刷題 力扣 面試題 04 03 特定深度節點鍊錶

題目鏈結 題目描述 給定一棵二叉樹,設計乙個演算法,建立含有某一深度上所有節點的鍊錶 比如,若一棵樹的深度為 d,則會建立出 d 個鍊錶 返回乙個包含所有深度的鍊錶的陣列。示例 輸入 1,2,3,4,5,null,7,8 1 2 3 4 5 7 8輸出 1 2,3 4,5,7 8 題目分析 根據題目...