您的位置:首页 > 编程语言 > Python开发

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 
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐