美文网首页程序员
从上到下顺序打印二叉树

从上到下顺序打印二叉树

作者: 沧州宁少 | 来源:发表于2017-12-04 17:26 被阅读0次

    从上到下不分行顺序打印二叉树。

    • 边界条件的控制
    • 把各个节点加入到一个序列里面,顺序打印

    废话不多说直接上代码

     void printFromTopBottom(TreeNode*pTreeRoot){
        
        if (!pTreeRoot ) {
            return;
        }
        //队列
        std:deque<TreeNode*> dequeTreeNode;
        
        dequeTreeNode.push_back(pTreeRoot);
        
        
        while (dequeTreeNode.size()) {
           
            TreeNode*pNode = dequeTreeNode.front();
            dequeTreeNode.pop_front();
            
            printf("%d",pNode->val);
            
            if (pNode->leftNode) {
                dequeTreeNode.push_back(pNode->leftNode);
            }
            if (pNode->rightNode) {
                dequeTreeNode.push_back(pNode->rightNode);
            }
        }
    }
    

    打印当前节点的时候,把当前节点的左右节点依次加入到deque的末尾,这样顺序打印。

    举一反三 ,现在要分行顺序打印二叉树

    通过分析,我们想到

    • 通过变量记录下一行需要打印的个数

    • 通过变量统计当前行还要打印的节点的个数,当数量为0的时候,换行。清空nextLine的数量。并给需要打印的个数赋值nextLine的个数。

      //分行 顺序打印二叉树

        void printTree(TreeNode*pTreeRoot){
        
        if (!pTreeRoot ) {
            return;
        }
        
        // 一个记录剩余被打印的。 一个记录下一行的个数
        int toBePrint = 1;
        int nextLevel = 0;
        
        std::deque<TreeNode*> queue;
        queue.push_front(pTreeRoot);
        while (!queue.empty()) {
           
            TreeNode*pNode = queue.front();
            queue.pop_front();
            
            printf("%d",pNode->val);
            if (pNode->leftNode) {
                queue.push_back(pNode->leftNode);
                nextLevel++;
            }
            if (pNode->rightNode) {
                queue.push_back(pNode->rightNode);
                nextLevel++;
            }
            toBePrint -- ;
            if (toBePrint == 0) {
                printf("\n");
                toBePrint = nextLevel;
                nextLevel = 0;
            }
            
        }
        }
      

    相关文章

      网友评论

        本文标题:从上到下顺序打印二叉树

        本文链接:https://www.haomeiwen.com/subject/tiixixtx.html