32-02 分行从上到下打印二叉树

题目

从上到下按层打印二叉树,同一层结点从左至右输出,每一层输出一行。

如下图:

打印效果:

C++ 题解

增加两个变量:
toBePrint保存这一层还没有打印出来的节点数目;
nextLevel保存下一层的节点数目,每次打印队列前端节点,toBePrint--,每次入一个节点到队列中,nextLevel++
当toBePrint==0时,表示一层打印完毕,打印换行符,并切换toBePrint的值。

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

	std::queue<BinaryTreeNode*> nodes;
	nodes.push(pRoot);

	int nextLevel = 0;
	int toBePrinted = 1;

	while (!nodes.empty())
	{
		BinaryTreeNode* pNode = nodes.front();
		printf("%d ", pNode->m_nValue);

		if (pNode->m_pLeft != nullptr)
		{
			nodes.push(pNode->m_pLeft);
			++nextLevel;
		}
		if (pNode->m_pRight != nullptr)
		{
			nodes.push(pNode->m_pRight);
			++nextLevel;
		}

		nodes.pop();
		--toBePrinted;
		if (toBePrinted == 0)
		{
			printf("\n");
			toBePrinted = nextLevel;
			nextLevel = 0;
		}
	}
}

python 题解

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回二维列表
    def Print(self, pRoot):
        # write code here
        if not pRoot:
            return []
        res=[]
        res_val=[]
        res.append(pRoot)
        
        nextLevel=0 #表示下一层节点的数目
        toBePrinted=1 #表示当前层还没有打印的节点数
        temp=[]
        while len(res)>0:
            node=res[0]
            temp.append(node.val)
            if node.left:
                res.append(node.left)
                nextLevel+=1
                
            if node.right:
                res.append(node.right)
                nextLevel+=1
                
            del res[0]
            toBePrinted-=1
            if toBePrinted==0:
                res_val.append(temp)
                toBePrinted=nextLevel
                nextLevel=0
                temp=[]
        return res_val

注意:

  • 使用python解法,返回的是二维列表。
posted @ 2019-03-10 19:16  youngliu91  阅读(97)  评论(0编辑  收藏  举报