美文网首页
树的镜像

树的镜像

作者: yigoh | 来源:发表于2016-12-30 09:10 被阅读0次

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;
}

有任何问题请回复提出。然后欢迎关注微信公众号格物致愚

格物致愚

相关文章

  • 《剑指offer》— JavaScript(18)二叉树的镜像

    二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 相关知识 二叉树的镜像定义:源二叉树 镜像二...

  • 树的镜像

    c++代码 有任何问题请回复提出。然后欢迎关注微信公众号格物致愚:

  • JZ-018-二叉树的镜像

    二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。题目链接: 二叉树的镜像[https://ww...

  • 二叉树的镜像-java

    二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6...

  • 剑指offer-18~20

    18.二叉树的镜像操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6 10/...

  • 二叉树镜像(反转二叉树)

    二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 相关知识 二叉树的镜像定义: 思路 有关二叉...

  • 剑指offer(java版)——解决面试题的思路

    1.镜像二叉树 题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ \...

  • 二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述 二叉树的镜像定义:源二叉树与镜像二叉树 代码 总...

  • 建立树的镜像

    镜像是指将节点的左右节点交换,对左右子树也施加相同的操作

  • 2019-09-06[剑指offer-]二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:

网友评论

      本文标题:树的镜像

      本文链接:https://www.haomeiwen.com/subject/twfmvttx.html