題目描述
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)按照之字形打印二叉樹(shù),即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。
解決方法
在層序遍歷的基礎(chǔ)上,增加根據(jù)行數(shù)進(jìn)行正向反向迭代(正向反向迭代利用LinkedList雙向鏈表)
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> layers = new ArrayList<>();
if (pRoot == null)
return layers;
Deque<TreeNode> queue = new LinkedList<>();
queue.offer(pRoot);
int depth = 0;
while (!queue.isEmpty()) {
depth++;
ArrayList<Integer> layer = new ArrayList<>();
int cur = 0, size = queue.size();
if ((depth & 1) == 0) { //如果是偶數(shù)層倒序添加
Iterator<TreeNode> it = queue.descendingIterator();
while (it.hasNext()) {
layer.add(it.next().val);
}
} else { //如果是奇數(shù)層正序添加
Iterator<TreeNode> it = queue.iterator();
while (it.hasNext()) {
layer.add(it.next().val);
}
}
while (cur < size) {
TreeNode node = queue.poll();
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
cur++;
}
layers.add(layer);
}
return layers;
}
}
復(fù)雜度分析:
- 時(shí)間復(fù)雜度:O(n)。
- 空間復(fù)雜度:O(n)。

哎呀,如果我的名片丟了。微信搜索“全菜工程師小輝”,依然可以找到我