103. 二叉树的锯齿形层序遍历(中)

题目

  • 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

pyhton:层序遍历

  • 用BFS把每一层的结点存在一个列表里面,然后判断一下如果是偶数层就翻转列表,最后都加入结果列表返回即可
class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
         if not root:# 如果根节点为空,直接返回空列表
             return []
         q = []  # 用一个列表做队列
         re = [] # 存储结果的列表
         q.append(root)  # 把起点放入队列
         step = 1   # 记录当前层的编号
         while q:  # 当队列不为空时
             size = len(q)
             re1=[]# 存储当前层的结果
             # 将当前队列中的所有节点向四周扩散
             for _ in range(size):
                 cur = q.pop(0)  # 从头部取出节点
                 re1.append(cur.val) # 将当前节点的值加入当前层的结果列表
                 if cur.left is not None:
                     q.append(cur.left) # 将左子节点加入队列
                 if cur.right : # 将cur的相邻节点加入队列 
                     q.append(cur.right) # 将右子节点加入队列
                     
             if step%2==0:# 如果当前层的编号为偶数,将结果列表反转
                re1.reverse() 
             re.append(re1) # 将当前层的结果列表加入最终结果列表
             step += 1  # 增加步数
         return re

JS:层序遍历

  • 用BFS把每一层的结点存在一个列表里面,然后判断一下如果是偶数层就翻转列表,最后都加入结果列表返回即可
var zigzagLevelOrder = function(root) {
    if (!root) return [];
    //层序遍历-》偶数层反转,
    let res = [];
    let queue = [root]
    while(queue.length>0){
        let n = queue.length;
        let cur_list = [];
        for(let i=0;i<n;i++){
            let cur_node = queue.shift();
            cur_list.push(cur_node.val);
            if(cur_node.left) queue.push(cur_node.left);
            if(cur_node.right) queue.push(cur_node.right);
        }
        if(res.length %2 !== 0){
            cur_list.reverse();
        }
        res.push(cur_list);
    }
    return res;
};
posted @ 2023-12-22 15:59  Frommoon  阅读(20)  评论(0)    收藏  举报