标签:while and 剑指offer bsp style str loaded not pre
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
此题类似于《剑指offer》的第32题
层序遍历二叉树是指对二叉树每一层从左到右进行访问。
非叶子节点
对于每一层的非叶子节点,都有两个子节点。在层序遍历时,上一层非叶子节点的遍历顺序,和下一层的叶子节点的遍历顺序是相同的。
因此对于下一层的节点来说,可以在遍历上一层节点时,使用容器存储起来。
容器的选择
可以观察到节点的访问顺序与放入容器的顺序是相同的,因此可以使用一个栈结构来存储下层的节点。
每层遍历开始和结束的判断
因为要判断每一层是否遍历完,需要一个变量记录每层的节点数目
将每层按照标准结果输出
这道题需要把每层作为一个list添加到result中
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None ? class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] res = [] res_val = [] res.append(root) nextLevel = 0 toBeAppended = 1 temp = [] while len(res)>0: node = res.pop(0) temp.append(node.val) ? # 这里一定注意要先放左节点再放右节点 if node.left: res.append(node.left) nextLevel +=1 if node.right: res.append(node.right) nextLevel +=1 #del res[0] toBeAppended -= 1 if toBeAppended == 0: res_val.append(temp) toBeAppended = nextLevel nextLevel = 0 temp = [] return res_val
# 实现方法2 # 使用容器代替计数 class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] res, curnodes = [], [root] while curnodes: curvals, nextnodes = [], [] for node in curnodes: curvals.append(node.val) if node.left: nextnodes.append(node.left) if node.right: nextnodes.append(node.right) res.append(curvals) curnodes = nextnodes return res
标签:while and 剑指offer bsp style str loaded not pre
原文地址:https://www.cnblogs.com/szxyx/p/13330082.html