Binary|Binary Tree Level Order Traversal II二叉树之层级次序2
Easy
给定二叉树,返回从下至上层级遍历的节点值(从左往右,从叶到根)
Example:此题是典型的DFS(depth-first search)算法题。可以使用递归的办法:
二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回:
[
[15,7],
[9,20],
[3]
]
- 根节点level为0,寻找根节点的值,加入响应res
- 更新根节点level,对根节点的左分支和右分支分别找根节点。
# Definition for a binary tree node.
# class TreeNode(object):
#def __init__(self, x):
#self.val = x
#self.left = None
#self.right = Noneclass Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
self.dfs(root,0,res)
return resdef dfs(self, root, level, res):
if root:
if len(res) < level + 1:
res.insert(0,[])
res[-(level+1)].append(root.val)
self.dfs(root.left,level+1,res)
self.dfs(root.right,level+1,res)
dfs+stack 下面是另外一种解决方案,直接利用stack。
def levelOrderBottom2(self, root):
stack = [(root, 0)]
res = []
while stack:
node, level = stack.pop()
if node:
if len(res) < level+1:
res.insert(0, [])
res[-(level+1)].append(node.val)
stack.append((node.right, level+1))
stack.append((node.left, level+1))
return res
bfs + queue 【Binary|Binary Tree Level Order Traversal II二叉树之层级次序2】下面是第三者解决办法,利用queue。
def levelOrderBottom(self, root):
queue, res = collections.deque([(root, 0)]), []
while queue:
node, level = queue.popleft()
if node:
if len(res) < level+1:
res.insert(0, [])
res[-(level+1)].append(node.val)
queue.append((node.left, level+1))
queue.append((node.right, level+1))
return res
推荐阅读
- LeetCode|LeetCode - 0100 - Same Tree
- 手把手教你实现|手把手教你实现 Tree 组件搜索过滤功能,干货满满!
- 超分辨率重建|论文阅读笔记之——《Multi-level Wavelet-CNN for Image Restoration》及基于pytorch的复现
- 使用 LSM Tree 思想实现一个 KV 数据库
- 数据结构|数据结构(树(Tree)【详解】)
- 全网最全的低代码/无代码平台盘点(简道云伙伴云明道云轻流速融云集简云Treelab钉钉·宜搭腾讯云·微搭智能云·爱速搭百数云)
- 【数据结构】JavaScript Binary Tree 实现
- 如何在C#9|如何在C#9 中使用顶级程序 (top-level)
- 数据结构|设计B+树(B+Tree)
- HDLBits->Circuits->Arithmetic|HDLBits->Circuits->Arithmetic Circuitd->3-bit binary adder