题目链接
https://leetcode.com/problems/binary-tree-level-order-traversal-ii/
题目原文
Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7},
3
/ \ 9 20
/ \ 15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
题目翻译
给定一个二叉树,返回其从下到上的层序遍历(从左到右,从下到上)。
思路方法
这道题实际上完全可以先得到从上到下的层序遍历,再逆序结果,但这样就没意思了,所以应该尝试避免reverse操作。不过方法还是类似的。
相关问题:102. Binary Tree Level Order Traversal [easy] (Python)
思路一
用队列来实现BFS,注意要在广搜的时候记录当前的层数。
代码
# 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):
""" :type root: TreeNode :rtype: List[List[int]] """
res = []
queue = [(root, 0)]
while len(queue) > 0:
node, depth = queue.pop()
if node:
if len(res) <= depth:
res.insert(0, [])
res[-(depth+1)].append(node.val)
queue.insert(0, (node.left, depth+1))
queue.insert(0, (node.right, depth+1))
return res
思路二
用栈来实现DFS,注意要在深搜的时候记录当前的深度。
代码
# 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):
""" :type root: TreeNode :rtype: List[List[int]] """
res = []
stack = [(root, 0)]
while len(stack) > 0:
node, depth = stack.pop()
if node:
if len(res) <= depth:
res.insert(0, [])
res[-(depth+1)].append(node.val)
stack.append((node.right, depth+1))
stack.append((node.left, depth+1))
return res
思路三
递归法实现DFS。
代码
# 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):
""" :type root: TreeNode :rtype: List[List[int]] """
res = []
self.dfs(root, 0, res)
return res
def dfs(self, root, depth, res):
if root:
if depth >= len(res):
res.insert(0, [])
res[-(depth+1)].append(root.val)
self.dfs(root.left, depth+1, res)
self.dfs(root.right, depth+1, res)
PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51583729