【LeetCode】102. Binary Tree Level Order Traversal 解題報告
阿新 • • 發佈:2019-01-24
Subject
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
Explain
層序遍歷
輸出二叉樹。重點是 按層輸出。
Solution
該題目與普通的層序遍歷輸出二叉樹不同的是,需要按層分開。
所以需要判斷當前結點是在哪一層。
solution 1
第一種方式可以使用佇列,然後用變數記錄每層結點的個數。
public List<Integer> list = new ArrayList<Integer>();
/**
* 遞迴方式 <br />
* 1ms
*
* @param root
* @return
*/
public List<Integer> inorderTraversal(TreeNode root) {
inOrder(root);
return list;
}
/**
* 遞迴方式
*
* @param node
*/
public void inOrder(TreeNode node) {
if (node == null) {
return;
}
if (node.left != null) {
inOrder(node.left);
}
list.add(node.val);
if (node.right != null) {
inOrder(node.right);
}
}
LeetCode平臺 Run Time 是 3ms 。
solution 2
遞迴方式
與其他遞迴遍歷不同的是,層序遍歷遞迴,需要記錄當前結點所在的層級。
所以遞迴方法需要加上一個表示當前結點所在層級的引數。
/**
* 遞迴方式 <br />
* 重要的是記錄層級<br />
* 1ms<br />
* eats87.36% of java submissions
*
* @param root
* @return
*/
public List<List<Integer>> levelOrder2(TreeNode root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
levelRecursion(root, result, 0);
return result;
}
/**
* 遞迴方法
*/
private void levelRecursion(TreeNode node, List<List<Integer>> result,
int level) {
if (node == null) {
return;
}
if (result.size() < level + 1) {// 說明還需要新增一行
result.add(new ArrayList<Integer>());
}
result.get(level).add(node.val);
levelRecursion(node.left, result, level + 1);
levelRecursion(node.right, result, level + 1);
}
LeetCode平臺 Run Time 是 1ms 。
打敗87.36%的答案~~
歐耶(^o^)/