2022年9月7日 星期三

429. N-ary Tree Level Order Traversal

給一個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);
		}
	}

沒有留言:

張貼留言