从上到下顺序打印二叉树

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

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

废话不多说直接上代码

 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;
          }
          
      }
      }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容