从上往下打印二叉树24

本文介绍了一种从上往下按层次打印二叉树的方法,包括二叉树节点的定义及实现层次遍历的算法。通过队列实现节点的逐层访问,并提供了完整的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。即层次遍历。
二叉树结点定义:

struct BinTreeNode{
  int m_value;
  BinTreeNode *left;
  BinTreeNode *right;
    //创建根节点,值为e
  BinTreeNode* createRoot(int e);
  //将e作为当前结点的左孩子值插入
  void insertAsLC(int e);
  //将e作为当前结点的右孩子值插入
  void insertAsRC(int e);
};

解题思路:

  1. 使用容器队列,利用其先进先出的特点。
  2. 每次先打印根节点,若其有子节点,则将子节点全部放入队列的队尾。
  3. 接下来从头部取出头节点,知道队列没有元素入队,并且遍历队列所有元素,直至其为空

测试用例:

int main(){
    //创建一颗二叉树
    BinTreeNode *tree = new BinTreeNode;
    tree->m_value = 8;
    BinTreeNode *tree2 = new BinTreeNode;
    tree2 = NULL;
    tree->insertAsLC(6); //左孩子为6
    tree->insertAsRC(10);

    tree->left->insertAsLC(5);
    tree->left->insertAsRC(7);

    tree->right->insertAsLC(9);
    tree->right->insertAsRC(11);

    //从上到下打印二叉树,即层次遍历
    PrintFromTopToBotto(tree2);  //Output: 8 6 10 5 7 9 11

    return 0;
}

函数实现:

void PrintFromTopToBotto(BinTreeNode *treeRoot){
    if(treeRoot == NULL)
        return;
    //辅助队列
    deque<BinTreeNode*> treeNode;
    //根节点入队
    treeNode.push_back(treeRoot);
    //当前队列不为空
    while(!treeNode.empty()){
        //输出队首元素
        BinTreeNode *pNode = treeNode.front();
        treeNode.pop_front();
        std::cout << pNode->m_value << " ";
        //若有左孩子,入队
        if(pNode->left)
            treeNode.push_back(pNode->left);
        if(pNode->right)
            treeNode.push_back(pNode->right);   
    }
}

其他函数实现:

//其他函数实现
//创建根节点,值为e
BinTreeNode* BinTreeNode::createRoot(int e){
     BinTreeNode *root = new BinTreeNode;
     root->m_value = e;
     return root;
 }

//作为节点的左孩子插入元素e
void BinTreeNode::insertAsLC(int e){
    BinTreeNode *Left = new BinTreeNode;
    Left->m_value = e;
    this->left = Left;
}

//作为节点的右孩子插入元素e
void BinTreeNode::insertAsRC(int e){
    BinTreeNode *Right = new BinTreeNode;
    Right->m_value = e;
    this->right = Right;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值