class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] res, deque = [], collections.deque([root]) while deque: tmp = collections.deque() for _ in range(len(deque)): node = deque.popleft() if len(res) % 2: tmp.appendleft(node.val) # 偶数层 -> 队列头部 else: tmp.append(node.val) # 奇数层 -> 队列尾部 if node.left: deque.append(node.left) if node.right: deque.append(node.right) res.append(list(tmp)) 讲解一下这个程序
时间: 2024-02-14 22:06:00 浏览: 183
leetcode2-LeetCode-Class:主要是JavaScript在LeetCode上面的ListNode与TreeNode,方便各
这个程序是一个二叉树按层序遍历的算法,它的实现基于一个双端队列 deque 和一个结果列表 res,其中 deque 存储当前层的节点,res 存储所有层的节点值。
程序从根节点 root 开始遍历,如果 root 为空,则直接返回空列表。否则,将 root 加入 deque 中,然后开始循环,直到 deque 中没有节点。
在循环中,首先创建一个空的双端队列 tmp,然后遍历 deque 中的所有节点,将它们的值按照奇偶性放入 tmp 中。如果当前层数是偶数,则将节点值添加到 tmp 的头部,否则添加到尾部。
接着,遍历完当前层的所有节点后,将 tmp 转换成一个普通列表,并将其添加到 res 中,表示当前层的节点值已经遍历完了。
最后,将当前层的所有子节点加入 deque 中,以便遍历下一层。重复执行以上步骤,直到 deque 中没有节点,遍历结束,返回结果列表 res。
阅读全文