leetcode_107. Binary Tree Level Order Traversal II 二叉树层次遍历,利用python的list特性实现队列功能
来源:互联网 发布:java汽车租赁系统 编辑:程序博客网 时间:2024/06/05 12:40
题目:
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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3]]
题意:
从底向上 层次遍历二叉树,打印从叶节点到根节点的层次遍历的节点值。
代码:
# 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]]
"""
if root == None :
return [] #如果根节点为空,则返回空链表
else :
node_value_result = [[root.val]] #node_value_result 记录从叶节点开始层次遍历的各节点的节点值
ancestors = [root] #ancestors记录当前层的父节点,依次遍历,寻找每个当前父节点的孩子节点
while len(ancestors) != 0 : #如果当前父节点为空,退出
temp_node_value = [] #否则,temp_node_value 记录当前所有父节点的孩子节点的值
next_ancestors = [] #next_ancestors 记录当前所有父节点的孩子节点,到下一次循环,这些节点变成父节点
for i in range(len(ancestors)) : #依次 遍历每个父节点
if ancestors[i].left != None : #访问左孩子
temp_node_value.append(ancestors[i].left.val)
next_ancestors.append(ancestors[i].left)
if ancestors[i].right != None : #访问右孩子
temp_node_value.append(ancestors[i].right.val)
next_ancestors.append(ancestors[i].right)
if len(temp_node_value) != 0 : #如果孩子节点值不为空,插入到result中,用于返回
node_value_result.append(temp_node_value)
ancestors = next_ancestors #更新父节点
return node_value_result[::-1] #逆序输出,得到从叶节点开始的层次遍历结果
笔记:
本题运用list结构,用两个list分别存储当前父节点和当前父节点的所有孩子,通过不断更新父节点list,达到层次遍历的目的。另外,用一个list存储每一层的节点值,用于返回。
算法参考:http://www.cnblogs.com/kwangeline/p/5953475.html
- leetcode_107. Binary Tree Level Order Traversal II 二叉树层次遍历,利用python的list特性实现队列功能
- 107.LeetCode Binary Tree Level Order Traversal II(easy)[二叉树层次遍历 广度搜索 队列]
- leetcode_107. Binary Tree Level Order Traversal II
- 70.Binary Tree Level Order Traversal II-二叉树的层次遍历 II(中等题)
- [Lintcode]Binary Tree Level Order Traversal II 二叉树的层次遍历 II
- LeetCode OJ 之 Binary Tree Level Order Traversal II (二叉树的层次遍历-二)
- leetcode_102. Binary Tree Level Order Traversal 二叉树层次遍历,python实现
- Binary Tree Level Order Traversal II(层次遍历二叉树II)
- leetcode---binary-tree-level-order-traversal-ii---树层次遍历
- 【二叉树层次遍历】Binary Tree Level Order Traversal
- leetCode解题报告之Binary Tree Level Order Traversal II,I(二叉树层次遍历)
- Binary Tree Level Order Traversal II 二叉树层次遍历(广搜,queue)(重重)
- Binary Tree Level Order Traversal I和II 层次遍历二叉树
- Leetcode 107. Binary Tree Level Order Traversal II 二叉树层次遍历2 解题报告
- 107. Binary Tree Level Order Traversal II (二叉树由底向上层次遍历)
- Leetcode#107. Binary Tree Level Order Traversal II (queue二叉树层次遍历)
- 102.LeetCode Binary Tree Level Order Traversal(easy)[二叉树层次遍历 广度搜索 队列]
- LeetCode(Binary Tree Level Order Traversal, 2,Zigzag)二叉树的层次遍历
- 等价类划分的原则
- 从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载
- WindowManagerService和应用程序的IPC过程
- Fibonacci数列(矩阵乘法快速幂)
- Java线程中的join和yield
- leetcode_107. Binary Tree Level Order Traversal II 二叉树层次遍历,利用python的list特性实现队列功能
- Spark性能优化:shuffle调优
- 如何用IDEA一步一步开发WebService客户端程序
- 工厂模式
- Android_获取手机版本型号
- 主席树 HDOJ2665 && POJ2104 && POJ2761
- c/c++练习–14
- Mybatis resultMap空值映射问题解决
- POJ 3125 Printer Queue(用队列模拟过程)