leetcode_107. Binary Tree Level Order Traversal II 二叉树层次遍历,利用python的list特性实现队列功能
2016-10-25 19:52
816 查看
题目:
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
return its bottom-up level order traversal as:
题意:
从底向上 层次遍历二叉树,打印从叶节点到根节点的层次遍历的节点值。
代码:
# 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
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
相关文章推荐
- 数据结构-----层次遍历二叉树算法(利用队列实现)
- 利用队列实现二叉树的层次遍历
- Python基于list的append和pop方法实现堆栈与队列功能示例
- 基于jdk的list 和 队列 linkedList 和父亲长子兄弟链表模型 实现的 树 的前序遍历,后序遍历和层次遍历
- [LeetCode] Binary Tree Level Order Traversal 与 Binary Tree Zigzag Level Order Traversal,两种按层次遍历树的方式,分别两个队列,两个栈实现
- 数据结构 利用循环队列层次遍历一棵二叉树 递归实现
- leetcode_102. Binary Tree Level Order Traversal 二叉树层次遍历,python实现
- Silverlight中利用ListBox特性实现单选按钮组RadioButtonList和复选按钮组CheckBoxList的功能
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
- ArrayList利用迭代器Iterator遍历方法实现数据(新闻)的删除、添加、显示功能例子
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
- 通过memcached实现领号排队功能及python队列实例 推荐
- 利用特性给方法实现自定义的功能
- 利用队列进行二叉树的层次遍历
- 二叉树层次遍历队列实现
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
- 设计技巧38:利用委托桥接类继承的功能层次和实现层次
- 二叉树遍历非递归算法所用到的栈以及层次遍历所用到的队列的基本操作算法的实现
- 二叉树(利用栈和队列实现递归和非递归遍历,构建等)