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

0 0
原创粉丝点击