递归法 关键在于如何构建res这个数据结构
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
res = []
def dfs(index,r):
# 假设res是[ [1],[2,3] ], index是3,就再插入一个空list放到res中
if len(res)<index:
res.append([])
# 将当前节点的值加入到res中,index代表当前层,假设index是3,节点值是99
# res是[ [1],[2,3] [4] ],加入后res就变为 [ [1],[2,3] [4,99] ]
res[index-1].append(r.val)
# 递归的处理左子树,右子树,同时将层数index+1
if r.left:
dfs(index+1,r.left)
if r.right:
dfs(index+1,r.right)
dfs(1,root)
return res作者:wang_ni_ma
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/die-dai-di-gui-duo-tu-yan-shi-102er-cha-shu-de-cen/
来源:力扣(LeetCode)
迭代法 关键在于栈操作 如何判断某一层的开始和结束
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
res, queue = [], collections.deque()
queue.append(root)
while queue:
tmp = []
for _ in range(len(queue)):
node = queue.popleft()
tmp.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
res.append(tmp)
return res作者:jyd
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/solution/mian-shi-ti-32-ii-cong-shang-dao-xia-da-yin-er-c-5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Z星遍历
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
res=[]
# def PrintTree(layer,root):
# if not root:
# return
# res.append(root.val)
# if layer%2==1:
# PrintTree(layer+1,root.right)
# PrintTree(layer+1,root.left)
# else:
# PrintTree(layer+1,root.left)
# PrintTree(layer+1,root.right)
stack=collections.deque()
stack.append(root)
flag=1
while stack:
n=len(stack)
tmp=[]
for _ in range(n):
if flag==-1:
cur=stack.pop()
tmp.append(cur.val)
if cur.right:stack.appendleft(cur.right)
if cur.left:stack.appendleft(cur.left)
else:
cur=stack.popleft()
tmp.append(cur.val)
if cur.left:stack.append(cur.left)
if cur.right:stack.append(cur.right)
flag*=-1
res.append(tmp)
return res
京公网安备 11010502036488号