leetcode_107. Binary Tree Level Order Traversal II 二叉树层次遍历,利用python的list特性实现队列功能

题目:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值