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

从上到下顺序打印二叉树

作者: 沧州宁少 | 来源:发表于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