樹的鏡像

c++代碼

#include<iostream>

using namespace std;

typedef struct BTN* BT;
struct BTN{
    int d;
    BT lc;
    BT rc;
};

BT initBT(int d){
    BT bt = new BTN;
    bt->d = d;
    bt->lc = NULL;
    bt->rc = NULL;
    return bt;
}

void insertBT(int d, BT bt, char c){
    BT t = initBT(d);
    switch(c){
        case 'l':
        bt->lc = t;
        break;
        case 'r':
        bt->rc = t;
    }
}

void deleteBT(BT bt){
    if(bt){ 
        BT t = bt;
        deleteBT(bt->lc);
        deleteBT(bt->rc);
        delete t;
    }
}

void changeBTc(BT bt){
    if(bt){
        BT t = bt->lc;
        bt->lc = bt->rc;
        bt->rc = t;
        changeBTc(bt->lc);
        changeBTc(bt->rc);  
    }
}

void printBT(BT bt){
    if(bt){ 
        printBT(bt->lc);
        cout<<bt->d<<" ";
        printBT(bt->rc);
    }
}

void levelTransBT(BT bt, int &n){
    int MAXQ = 50;
    BT queue[MAXQ];
    
    for(int i = 0; i < MAXQ; i++)
        queue[i] = NULL;

    int f = 0;
    int r = 0;
    
    queue[r++] = bt;
    
    int flag = 1;
    int temp = 1;
    n = temp;
    
    while(queue[f]){
        flag--;
        if(!flag){
            flag = temp;
            temp = 0;
        }

        BT t = queue[f++];
        cout<<t->d<<" ";
        if(t->lc){
            queue[r++] = t->lc;
            temp++;
        }
        if(t->rc){
            queue[r++] = t->rc;
            temp++;
        }

        if(temp > n)
            n = temp;
    }
}

BT init(){
    BT bt = initBT(15);
    insertBT(7, bt, 'l');
    insertBT(18, bt, 'r');

    BT l = bt->lc;
    insertBT(5, l, 'l');
    insertBT(8, l, 'r');
    BT r = bt->rc;
    insertBT(26, r, 'l');
    insertBT(1, r, 'r');
    
    BT t = l;
    l = l->lc;
    insertBT(10, l, 'l');
    insertBT(26, l, 'r');
    l = l->lc;  
    insertBT(9, l, 'l');
    insertBT(14, l, 'r');
    insertBT(6, t->lc->rc, 'l');
    
    l = t->rc;
    insertBT(2, l, 'l');
    insertBT(19, l, 'r');
    insertBT(28, l->lc, 'r');
    insertBT(3, l->rc, 'l');
    
    t = r;
    r = r->lc;
    insertBT(8, r, 'r');
    insertBT(18, r->rc, 'l');
    r = t->rc;
    insertBT(6, r, 'r');
    r = r->rc;
    insertBT(14, r, 'l');
    insertBT(27, r, 'r');
    
    return bt;
}

int main(){
    BT bt = init();
    printBT(bt);
    
    changeBTc(bt);
    cout<<"\nchird changed:\n";
    printBT(bt);
    
    changeBTc(bt);
    int n = 0;
    cout<<"\nlevel trans:\n"; 
    levelTransBT(bt, n);
    cout<<"\nthe width:\n"<<n;
    return 0;
}

有任何問題請回復(fù)提出。然后歡迎關(guān)注微信公眾號格物致愚

格物致愚
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目:請完成一個函數(shù),輸入一個二叉樹,該函數(shù)輸出它的鏡像。 代碼如下: 測試代碼1: 測試代碼2: 測試代碼3: ...
    3e1094b2ef7b閱讀 445評論 0 0
  • 題目:請完成一個函數(shù),輸入一個二叉樹,該函數(shù)輸出它的鏡像.代碼: 測試代碼:
    FlyElephant閱讀 433評論 0 0
  • 這篇文章有兩個點,第一個是題目本身,第二個是我覺得很不錯的用棧來模擬遞歸。 做過這么多樹的題目后應(yīng)該覺得用遞歸很簡...
    AwesomeAshe閱讀 676評論 0 1
  • 二叉樹的鏡像 題目描述 操作給定的二叉樹,將其變換為源二叉樹的鏡像。 相關(guān)知識 二叉樹的鏡像定義:源二叉樹 鏡像二...
    echoVic閱讀 869評論 1 2
  • 題目描述 操作給定的二叉樹,將其變換為源二叉樹的鏡像。 代碼實現(xiàn) 主要思路 很簡單的遞歸題,三步走:(1)特殊輸入...
    _minimal閱讀 160評論 0 0

友情鏈接更多精彩內(nèi)容