1. 程式人生 > >【leetcode】二叉樹的遍歷。

【leetcode】二叉樹的遍歷。

題目要求

二叉樹的遍歷。

核心思想

利用佇列的特性來實現二叉樹的遍歷。

完整程式碼如下

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; } }