二叉树的先序、后序、中序、层序遍历(递归的方法)

本文详细介绍了二叉树的四种基本遍历方法:先序(根-左-右)、中序(左-根-右)、后序(左-右-根)以及层序(逐层遍历)。通过代码示例展示了如何使用递归和迭代实现这些遍历过程。

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

1、先序遍历

        我的理解就是 先根节点,然后在左子树,右子树

代码

void PreorderTraversal( BinTree BT ){
    if (BT == NULL)
        return ;
    //前序遍历
    printf(" %c", BT -> Data);
    PreorderTraversal(BT -> Left);
    PreorderTraversal(BT -> Right);
    
}

 2、中序遍历

        就是先根节点的左子树,然后根节点 然后是右子树

代码

void InorderTraversal( BinTree BT ){
    if (BT == NULL)
        return;
    //中序遍历
    InorderTraversal(BT -> Left);    
    printf(" %c", BT -> Data);
    InorderTraversal(BT -> Right);   
    
}

 3、后序遍历

        就是先左子树,然后右子树,最后根节点

//后序遍历
    PostorderTraversal(BT -> Left);
    PostorderTraversal(BT -> Right);
    printf(" %c", BT -> Data);
    
}

 4、层序遍历

        一层一层的遍历下去

 

void LevelOrder(BinT BT){
    queue<BinT>q;//定义一个结点类型的队列
    int flog = 1;
    if(BT){
        BinT temp;//定义一个结点用来存队列中的第一个结点
        q.push(BT);//放入根节点 这个时候队列一定不会是空的
        while(!q.empty()){
            temp = q.front();//把对立的第一个元素,给temp;
            q.pop();//删除队列第一个元素
            //输出这个树结点的值
            if (flog) cout << temp->data, flog = 0;
            else cout << " " << temp->data;
            //将这个结点的左右还在放进队列(如过有的话)  
            if (temp->left != NULL) q.push(temp->left);
            if (temp->right != NULL) q.push(temp->right);
            
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DsirNg

加油努力,千万不要放弃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值