pat1102 无语的错误,感谢有你

来源:互联网 发布:淘宝服装拍摄报价 编辑:程序博客网 时间:2024/05/16 23:48

题目内容
https://www.patest.cn/contests/pat-a-practise/1102
关于树的题目实在是不好复制粘贴,我就直接放链接啦~~~
题目分析
1.题目意思就是把二叉树,倒置一下,输出层次遍历和中序遍历结果。二叉树倒置,肯定不是上下颠倒,而是左右颠倒。在颠倒时树的根节点是不会变的。因此,在建树时直接把左右节点变一下就好。
2.关于,“-”的处理,“-”代表没有,那么一般我喜欢用-1表示,在输入的时候变一下就好。
3.找根节点。。。。。。只有根节点没有父亲节点,也就是说根节点不是那个节点的孩子节点,因此在输入中没有出现的那个在0-N之间的那个数就是根节点!要不是写代码,我真的不能深入理解只有根节点没有父节点。
4.关于中序遍历,利用递归就可以轻而易举的实现。关于层次遍历,利用队列,根节点入队,然后节点出对,节点的左右子树分别入队,就是这么简单。
5.我的妈呀,全局变量和局部变量一定要分清楚呀。我就是BiTree一会局部一会全局,导致程序崩溃。好气呀!
不说了,看代码

#include <iostream>#include <stdlib.h>#include <queue>/* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std;struct BiNode{    int value,lchild,rchild;};const int NUM = 11;BiNode BiTree[NUM];int inOrderSequence[NUM]={-1};int index = 0;//中序遍历 void InOrder(int root){    if(BiTree[root].lchild!=-1){        InOrder(BiTree[root].lchild);    }    inOrderSequence[index++] = BiTree[root].value;     if(BiTree[root].rchild!=-1){        InOrder(BiTree[root].rchild);    }}int main(int argc, char *argv[]) {    int n ;    cin>>n;    int num[n];    //建立二叉树     for(int i=0;i<n;i++){        char lc,rc;        int lchild,rchild;        cin>>lc>>rc;        if(lc=='-'){            lchild = -1;        }        else{            lchild = lc-'0';            }        if(rc=='-'){            rchild = -1;        }        else{            rchild = rc - '0';        }        BiTree[i].rchild = lchild;        BiTree[i].lchild = rchild;        BiTree[i].value = i;    }    //找根节点    int NodeIndex[n];     int root;    for(int i=0;i<n;i++){        NodeIndex[i] = 0;    }     for(int i=0;i<n;i++){        if(BiTree[i].lchild!=-1){            NodeIndex[BiTree[i].lchild]++ ;        }        if(BiTree[i].rchild!=-1){            NodeIndex[BiTree[i].rchild]++ ;        }    }    for(int i=0;i<n;i++){        if(NodeIndex[i] == 0){            root = i;        }       }     //层次遍历,借助队列     queue<int> q;    q.push(root);    int levelSequence[n];    int index = 0;    while(!q.empty()){        int top = q.front();        levelSequence[index++]=BiTree[top].value;        q.pop();        if(BiTree[top].lchild!=-1)        q.push(BiTree[top].lchild);        if(BiTree[top].rchild!=-1)        q.push(BiTree[top].rchild);    }    cout<<levelSequence[0];    for(int i=1;i<n;i++){        if(levelSequence[i]!=-1){            cout<<" "<<levelSequence[i];        }    }    cout<<endl;    InOrder(root);    cout<<inOrderSequence[0];    for(int i=1;i<n;i++){        if(inOrderSequence[i]!=-1){            cout<<" "<<inOrderSequence[i];        }    }    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 教师职称证丢了怎么办 会计初级证丢了怎么办 工作遭同事不满否认质疑怎么办 单位领导不让进收入财务怎么办 事业单位50岁不愿退休的怎么办 回美国i20丢了怎么办 i20忘签字美国入境怎么办 社保基数报错了怎么办 公司合同没给我怎么办 给客户报错价格怎么办 给客户报价低了怎么办 报价失误报低了怎么办 期望薪资说低了怎么办 期望薪资说高了怎么办 面试工资说低了怎么办 期望薪资谈低了怎么办 请年假公司不批怎么办 期望工资填低了怎么办 面试工资要高了怎么办 找工作期望薪资写低了怎么办 期望工资写少了怎么办 不给工人发工资怎么办 天亮了怎么办我好想你 亲爱的我想你我怎么办 人在澳大利亚悉尼找不到了怎么办 红米手机忘记手势密码怎么办 捡到苹果手机怎么办才能自己用 日语会读不会写怎么办 手术后nbp过低怎么办 我的手破了怎么办英文 平板手机屏坏了怎么办 他很优秀我该怎么办 洗澡的花洒漏水怎么办 高三了文科成绩很差怎么办 骑缝章最后一页没盖全怎么办 机票取早了没有登机口怎么办 机票早订比晚订贵怎么办? 孩子考差了父母怎么办 保险公司不给业务员办退司怎么办 我不习惯没有你我怎么办 锁坏了打不开了怎么办