【leetcode】二叉樹的遍歷。
阿新 • • 發佈:2018-12-23
題目要求
二叉樹的遍歷。
核心思想
利用佇列的特性來實現二叉樹的遍歷。
完整程式碼如下
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* 二叉樹的遍歷
*
*/
public class Solution {
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this .val = val;
}
}
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
List<Integer> tempList = new ArrayList<>();
if(root == null) {
return list;
}
Queue<TreeNode> queue = new LinkedList <>();
queue.add(root);
int toBePrint = 1;//這一層要列印的節點
int nextLevelCount = 0;
while(queue.isEmpty() == false) {
TreeNode temp = queue.poll();//出隊
tempList.add(temp.val);
toBePrint--;
if(temp.left != null) {
queue.add(temp.left); //入隊,先入先出
nextLevelCount++; //統計下一層節點
}
if(temp.right != null) {
queue.add(temp.right);
nextLevelCount++;
}
if(toBePrint == 0) { //當這一層節點列印完了
list.add(new ArrayList<>(tempList)); //儲存結果
tempList.clear();
toBePrint = nextLevelCount; //下一層需要列印的節點
nextLevelCount = 0; //下下層節點初始值
}
}
return list;
}
}