32-01 从上到下打印二叉树

题目

从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图中的二叉树,则依次打印出8、6、10、5、7、9、11。

C++ 题解

借助双端队列来实现,每次从头部取节点打印,将其左子节点和右子节点依次添加到队尾。

void PrintFromTopToBottom(BinaryTreeNode* pRoot)
{
	if (pRoot == nullptr)
		return;

	std::deque<BinaryTreeNode*> dequeTreeNode;
	dequeTreeNode.push_back(pRoot);

	while (dequeTreeNode.size())
	{
		BinaryTreeNode* pNode = dequeTreeNode.front();
		dequeTreeNode.pop_front();

		printf("%d ", pNode->m_nValue);

		if (pNode->m_pLeft)
			dequeTreeNode.push_back(pNode->m_pLeft);

		if (pNode->m_pRight)
			dequeTreeNode.push_back(pNode->m_pRight);
	}
}

python 题解

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回从上到下每个节点值列表,例:[1,2,3]
    def PrintFromTopToBottom(self, root):
        # write code here
        if not root:
            return []
        res=[]
        res_val=[]
        res.append(root)
        while len(res)>0:
            node=res.pop(0)
            res_val.append(node.val)
            if node.left:
                res.append(node.left)
            if node.right:
                res.append(node.right)
        return res_val
posted @ 2019-03-10 11:57  youngliu91  阅读(94)  评论(0编辑  收藏  举报