版权声明:随意取用(´・ω・`) / https://blog.csdn.net/square_zou/article/details/84405421
Problem
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回其自底向上的层次遍历为:
too young 思路
遍历然后print。。。?
尝试写了个错的出来。。
dalao思路
看的我很是痛苦_(:」∠)
dfs-recursively-28ms
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrderBottom(self, root):
# with dfs recursivrly
value = []
self.dfs(root, 0, value)
return value
def dfs(self, root, level, value):
if root:
if len(value) < level + 1:
value.insert(0, [])
value[-(level+1)].append(root.val)
self.dfs(root.left, level+1, value)
self.dfs(root.right, level+1, value)
dfs-stack-28ms
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrderBottom(self, root):
# with dfs stackd
stack = [(root, 0)]
value = []
while stack:
node, level = stack.pop()
if node:
if len(value) < level + 1:
value.insert(0, [])
value[-(level+1)].append(node.val)
stack.append((node.right, level+1)) #先进去的后出来
stack.append((node.left, level+1))
return value
bfs-queue-28ms
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def levelOrderBottom(self, root):
# with bfs queue
queue = collections.deque([(root, 0)])#双端队列
value = []
while queue:
node, level = queue.popleft()
if node:
if len(value) < level + 1:
value.insert(0, [])
value[-(level+1)].append(node.val)
queue.append((node.left, level+1))
queue.append((node.right, level+1))
return value