题目来源和说明本题来源于2005年华中科技大学计算机保研机试真题,试通过本次专题梳理和总结二叉排序树的问题。题目描述输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。样例输入:51 6 5 9 8输出:1 6 5 9 81 5 6 8 95 8 9 6 1简要分析这个程序的主要代码,是节点x插入树T中,保持二叉排序树的性质,即Insert(Node* T,int x)函数。这个主要是递归的思想。如果x<T.c,即插入左子树;如果x>T.c,即插入右子树。还需要特判一下,T是否为空。因为如果不处理T.c就会出问题。T为空,就直接创建一个节点赋值给T就可以啦~C++ 代码#include<iostream>#include<string.h>using namespace std;struct Node {    Node *l;    Node *r;    int c;}Tree[110]; //静态数组int idx;Node *create() { //创建新节点    Tree[idx].l=NULL;    Tree[idx].r=NULL;    return &Tree[idx++];}void postOrder(Node *T) { //后序遍历    if(T->l!=NULL) {        postOrder(T->l);    }    if(T->r!=NULL) {        postOrder(T->r);    }    printf("%d ",T->c);}void inOrder(Node *T) { //中序遍历    if(T->l!=NULL) {        inOrder(T->l);    }    printf("%d ",T->c);    if(T->r!=NULL) {        inOrder(T->r);    }}void preOrder(Node *T) { //后续遍历    printf("%d ",T->c);    if(T->l!=NULL) {        preOrder(T->l);    }    if(T->r!=NULL) {        preOrder(T->r);    }}Node* Insert(Node *T,int x) { //插入数字    if(T==NULL) { //当前树为空        T=create();        T->c=x;        return T;    }    else if(x<T->c){        T->l=Insert(T->l,x); //插入左子树    }    else if(x>T->c) {        T->r=Insert(T->r,x); //插入右子树    }    return T;}int main() {    int n;    while(scanf("%d",&n)!=EOF) {        idx=0;        Node *T=NULL;        for(int i=0;i<n;i++) {            int x;            scanf("%d",&x);            T=Insert(T,x); //插入到排序树中        }        preOrder(T);        printf("\n");        inOrder(T);        printf("\n");        postOrder(T);        printf("\n");    }    return 0;}同类题目二叉搜索树C++代码
点赞 0
评论 0
全部评论

相关推荐

08-11 11:29
门头沟学院 Java
点赞 评论 收藏
分享
08-05 18:14
门头沟学院 Java
小花的沉默:是学历厂没错啊,学历太高了不要
投递小鹏汽车等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务