給一個n-ary的樹,如下圖,將其依節點與根的相對位置,整理為List<List<Integer>>
https://leetcode.com/problems/n-ary-tree-level-order-traversal/submissions/
範例Input: root = [1,null,3,2,4,null,5,6]
Output: [[1],[3,2,4],[5,6]]一樣使用遞迴來作業,並沒有什麼太複雜的手法
public List<List<Integer>> levelOrder(Node root) {
if (root == null) {
return new ArrayList<>();
}
//建立回傳List
List<List<Integer>> rtn = new ArrayList<>();
//執行遞迴
levelInput(root, rtn, 1);
return rtn;
}
public void levelInput(Node root, List<List<Integer>> rtn, int level) {
List<Integer> temp;
//確定是否已建立List<Integer>
if (rtn.size() < level) {
//尚未建立
temp = new ArrayList<>();
rtn.add(temp);
} else {
//已建立,從rtn直接取出使用
temp = rtn.get(level - 1);
}
temp.add(root.val);
//檢查是否有childList
List<Node> childList = root.children;
if (childList == null || childList.size() == 0) {
return;
}
//存在childList,逐筆執行遞迴
for (Node node : childList) {
levelInput(node, rtn, level + 1);
}
}
沒有留言:
張貼留言