LeetCode-二叉树层次遍历——D11【一般难度】

it2022-05-08  9

题目描述

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

For example: Given binary tree [3,9,20,null,null,15,7],

3 / \ 9 20 / \ 15 7

return its level order traversal as: [ [3], [9,20], [15,7] ]

算法思路

1)加入null标记一层是否结束,使用队列来进行层次遍历 2)第一次加入【root,null】

如果出队列元素不是null,则将出栈元素的左孩子和右孩子加入队列中,重复直到遇到下一个null如果出栈的是null,则说明一层已经完了,需要删除第一个null字符,并新的一层后面加入null

3)如果经过输出之后第一个元素还是null,说明新的一层为空,即所有元素已经输出,结束循环

算法实现

class TreeNode(): def __init__(self,x): self.val=x self.left=None self.right=None class Solution(): def levelOrderTraversal(self,root): res=[] queue=[root,'null'] while queue[0]!='null': temp=[] #如果出队列元素不为null,则将左右孩子入队列,然后继续让队列中元素出来 while queue[0]!='null': node=queue.pop(0) temp.append(node.val) if node.left!=None:queue.append(node.left) if node.right!=None:queue.append(node.right) queue.append('null')#新的一层加入null queue.pop(0)#删除上一层留下来的null if len(temp)!=0: res.append(temp) print(temp) return res #测试 test=Solution() n1=TreeNode(1) n2=TreeNode(2) n3=TreeNode(3) n4=TreeNode(4) n5=TreeNode(5) n6=TreeNode(6) n7=TreeNode(7) n1.left=n2 n1.right=n3 n2.left=n4 n3.left=n5 n3.right=n6 n6.right=n7 """ 1 / \ 2 3 / /\ 4 5 6 \ 7 """ print(test.levelOrderTraversal(n1))

小结

以层为基本单位,层之间的间隔为null,如果这一层没有全部出队列,则需要不断出队列,并把相应孩子节点加入到队列后面。直到遇到null说明这一层已经结束。

要删除上一层留下的null和添加下一层的null,如果新的层为空,说明已经没有元素了,此时可以退出程序,即所有层遍历结束的条件是队列中第一个元素为null。


最新回复(0)