二叉树的遍历

        这, 是一棵二叉树,你想访问它的节点,就要用到二叉树的遍历

二叉树的遍历,可分为深度优先和广度优先,先来说说深度优先:

二叉树的深度优先遍历,分为前序,中序和后序遍历,以前序遍历为例,访问顺序为:根—左—右,即先访问根结点的数据,再访问左子树和右子树的数据,具体逻辑如下图:

        相应地,后序和中序的访问顺序分别为:左-右-中,左-中-右,深度优先遍历的具体代码如下注意要用到递归的知识:

// 二叉树前序遍历 
void BinaryTreePrevOrder(BTNode* root)
{

    if (root == NULL)
    {
        return;
    }

    printf("%c ",root->_data);

    BinaryTreePrevOrder(root->_left);
    BinaryTreePrevOrder(root->_right);



}




// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root)
{
    if (root == NULL)
    {
        return;
    }

    BinaryTreeInOrder(root->_left);

    printf("%c ", root->_data);

    BinaryTreeInOrder(root->_left);

}
// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root)
{
    if (root == NULL)
    {
        return;
    }

    BinaryTreePostOrder(root->_left);
    BinaryTreePostOrder(root->_right);
    printf("%c ",root->_data);

}

        然后就是二叉树的广度优先遍历,也就是层序遍历,就是一层一层地遍历,以本文给的二叉树为例,第一层为0,第二层为1,2,第三层为3,4,5,6,那么总体的遍历结果为:0,1,2,3,4,5,6,其实现要用到队列的数据结构,将根结点压入队列,出来时将左右子树也压入队列,子树为空不压,直到队列为空为止,具体代码如下:

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root)
{
    Queque* index = (Queque*)malloc(sizeof (Queque));
    InitQue(index);

    PushQue(index,root);
    while (index->size != 0)
    {
        BTNode* check = QueTop(index);
        PopQue(index);
        printf("%c ",check->_data);
        if (check->_left != NULL)
        {
            PushQue(index,check->_left);
        }

        if (check->_right != NULL)
        {
            PushQue(index,check->_right);
        }

    }




    DestoryQue(index);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值