20180722剑指offer题23——从上往下打印二叉树

一、要求

    从上往下打印出二叉树的每个节点,同层节点从左至右打印。相当于深度优先按层遍历, 中间需要队列做转存。

二、思路及代码

广度优先搜索,用一个队列进行存贮,从左到右,pop一个就print一个,并把这个节点的左右子节点排队到最后。另一个队列一直append要输出的值。

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

def solution(node):
    if not node:
        return node
    list1=[node]
    result=[]
    while list1!=[]:
        currentnode=list1.pop(0)
        result.append(currentnode.val)#result需要append的是val,不是节点
        if currentnode.left:
            list1.append(currentnode.left)
        if currentnode.right:
            list1.append(currentnode.right)
    return result

#################
pNode1 = TreeNode(1)
pNode2 = TreeNode(2)
pNode3 = TreeNode(3)
pNode4 = TreeNode(4)
pNode5 = TreeNode(5)
pNode6 = TreeNode(6)
pNode7 = TreeNode(7)

pNode1.left = pNode2
pNode1.right = pNode3
pNode2.left = pNode4
pNode2.right = pNode5
pNode3.left = pNode6
pNode3.right = pNode7

print(solution(pNode1))

三、运行结果

[1, 2, 3, 4, 5, 6, 7]

四、思考与总结

可以用list辅助实现广度优先

猜你喜欢

转载自blog.csdn.net/weixin_41819299/article/details/81152905