【作业11】二叉树层序遍历(变形版)
对应课程链接:拿捏算法面试课程
# 题目描述
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
对应的 leetcode 链接:剑指 Offer 32 – III. 从上到下打印二叉树
打卡要求:给出运行通过的代码
参考答案
我之前录制过讲解视频:本题视频讲解
对应课程链接:拿捏算法面试课程
# 题目描述
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
对应的 leetcode 链接:剑指 Offer 32 – III. 从上到下打印二叉树
打卡要求:给出运行通过的代码
我之前录制过讲解视频:本题视频讲解
共以下 16 个回答
“> decorateRecord(TreeNode root) {
//打卡
public List<List
if(root null){
return new ArrayList();
}
“java
打卡
“`java queue = new LinkedList<>();
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
Queue
List
> res = new ArrayList<>();> decorateRecord(TreeNode root) {>(); t = new ArrayList<>();
public List
if(root == null) return new ArrayList
queue.add(root);
int count =0;
while(!queue.isEmpty() && root != null){
count++;
List
int size = queue.size();
for(int i = 0; i< size; i++){ TreeNode temp = queue.poll(); if(count%2==1){ t.add(temp.val); } if(count%2==0){ t.add(0,temp.val); }
}
打卡
打卡
打卡
弄清那一层需要反转。
class Solution {> levelOrder(TreeNode root) { que=new ArrayDeque<>();> res = new ArrayList<>(1);
public List<List
Queue
List<List
if(rootnull)
return res;
res.add(new ArrayList(1));
que.offer(root);
boolean flag=false;
int levelLen=1;
int idx=0;
while(!que.isEmpty()){
TreeNode cur= que.poll();
res.get(idx).add(cur.val);
if(cur.left!=null)
que.offer(cur.left);
if(cur.right!=null)
que.offer(cur.right);
levelLen–;
if(levelLen0){
levelLen=que.size();
if(flag){
Collections.reverse(res.get(idx));
}
flag=!flag;
idx++;
res.add(new ArrayList(levelLen));
}
}
res.remove(idx);
return res;
}
}//时间O(n) 空间O(n)
“`java
class Solution {
public List
> levelOrder(TreeNode root) {
if(root == null){
return new ArrayList<>();
}
}//时间O(n) 空间O(n)
时间O(n)
空间O(n)
时间O(n) 空间O(n)