求二叉樹的鏡像(非遞歸&遞歸)

前言

什麼是二叉樹鏡像
其實就是左右子樹對調一下就是二叉樹的鏡像了

比如下面兩圖就是互爲鏡像的二叉樹

這裏寫圖片描述

這裏寫圖片描述

遞歸方法

方法分析

採用分置的思想,大事化小事,把交換左右子樹地址的事交給每一個棧幀完成。

完整代碼

//二叉樹的鏡像 遞歸方法
void BTreeMirrorR(BTNode* root)
{
    BTNode* tmp;
    if (root == NULL)
        return;
    BTreeMirrorR(root->_left);
    BTreeMirrorR(root->_right);
    tmp = root->_left;
    root->_left = root->_right;
    root->_right = tmp;
}

非遞歸方法

方法分析

可以在層序遍歷的基礎上對每一層的結點的左右子樹進行交換

//二叉樹的鏡像 非遞歸方法
void BTreeMirror(BTNode* root)
{
    BTNode* top;
    BTNode* tmp;
    Queue Q;
    if (root == NULL)
        return;
    QueueInit(&Q);
    QueuePush(&Q, root);
    while (!QueueEmpty(&Q))
    {
        top = QueueFront(&Q);
        if (top->_left != NULL)
            QueuePush(&Q,top->_left);
        if (top->_right != NULL)
            QueuePush(&Q, top->_right);

        //交換左右子樹的地址
        tmp = top->_left;
        top->_left = top->_right;
        top->_right = tmp;

        QueuePop(&Q);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章