I am trying to do the zigzag level order traversal of a binary tree's nodes values (ie, from left to right, then right to left for the next level and alternate between) on https://www.interviewbit.com/problems/zigzag-level-order-traversal-bt/ But the compiler gives time limit exceeded error. How can I resolve it?
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param A : root node of tree
# @return a list of list of integers
def zigzagLevelOrder(self, A):
st_crt_lvl =[A]
st_nxt_lvl =[]
ans_list = []
while st_crt_lvl:
u = st_crt_lvl.pop(0)
ans_list.append(u.val)
if u.left:
st_nxt_lvl.append(u.left)
if u.right:
st_nxt_lvl.append(u.right)
while st_nxt_lvl:
u = st_nxt_lvl.pop()
ans_list.append(u.val)
if u.right:
st_crt_lvl.append(u.right)
if u.left:
st_crt_lvl.append(u.left)
return ans_list
您可以从代码中消除多个内部}。在
while
循环,方法是使队列st_nxt_lvl
临时,并在二叉树的每个级别的处理结束时将此临时队列的内容复制到当前队列{这可以通过保持一个队列(没有任何临时存储)和标准
bfs
算法进行级别顺序遍历来实现,但是由于我们希望在每个级别上进行锯齿形顺序遍历,所以有一个临时队列更为优雅,因此临时队列只保留下一级元素,当处理完当前级别元素时,当前队列指向下一级。在通过对代码进行一些修改,以及一个示例树:
您可以使用宽度优先搜索:
当从问题中的链接构造示例中的同一棵树时,输出为:
^{pr2}$输出:
此解决方案使用breadth-first search水平遍历树。但是,由于(完整的)二叉树有两个子级,因此只有两个值将添加到队列中。因此,为了确定搜索已达到的当前树级别,必须在树(
__getitem__
和__lookup
)中实现查找特定值深度的方法。在相关问题 更多 >
编程相关推荐