幻星huanxing 2023-11-06 21:45 采纳率: 28.6%
浏览 5
已结题

请问该代码要怎样修改

题目:编写程序,构造二叉树的链式存储结构,并完成递归先序(中序、后序)遍历操作,计算二叉树的高度、叶子数
代码:#include using namespace std;typedef struct BiNode{ char data; struct BiNode *lchild,*rchild;}*BiTree;void CreateBiTree(BiTree &T){ char ch; cin>>ch; if (ch=='#') T=NULL; else { T=new BiNode; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); }}void PreOrderTraverse(BiTree T){ if(T) { cout<data; PreOrderTraverse(T->lchild) ; PreOrderTraverse(T->rchild) ; }}void InOrderTraverse(BiTree T){ if(T) { InOrderTraverse(T->lchild) ; cout<data; InOrderTraverse(T->rchild) ; }}void PostOrderTraverse(BiTree T){ if(T) { PreOrderTraverse(T->lchild) ; PreOrderTraverse(T->rchild) ; cout<data; }}int NodeConut(BiTree T){ if(T==NULL) return 0; else return NodeConut(T->lchild) +NodeConut(T->rchild)+1;}int LeafConut(BiTree T){ if(T==NULL) return 0; else if (T->lchild==NULL && T->rchild==NULL) return 1; else return LeafCount(T->lchild)+LeafCount(T->rchild);}int TreeDepth(BiTree T){ int d1,d2; if (T==NULL) return 0; else { d1=TreeDepth(T=>lchild); d2=TreeDepth(T=>rchild); if(d1>=d2) return d1+1; else return d2+1; }}int main(){ BiTree T; cout<<"请输入建立二叉链表的前序序列:\n"; CreateBiTree(T); cout<<endl; cout<<"先序遍历的结果为:\n"; PreOrderTraverse(T); cout<<endl<<endl; cout<<"中序遍历的结果为:\n"; InOrderTraverse(T); cout<<endl<<endl; cout<<"后序遍历的结果为:\n"; ProOrderTraverse(T); cout<<endl<<endl; cput<<"二叉树结点总数为:"<<NodeCount(T)<<endl<<endl; cput<<"二叉树叶子结点总数为:"<<LeafCount(T)<<endl<<endl; cput<<"二叉树的深度为:"<<TreeDepth(T)<<endl;}

  • 写回答

2条回答 默认 最新

  • 超级小狗 2023-11-06 21:49
    关注
    #include <iostream>
    
    using namespace std;
    
    typedef struct BiNode {
        char data;
        struct BiNode* lchild;
        struct BiNode* rchild;
    } *BiTree;
    
    // 建立二叉树
    void CreateBiTree(BiTree& T) {
        char ch;
        cin >> ch;
        if (ch == '#')
            T = NULL;
        else {
            T = new BiNode;
            T->data = ch;
            CreateBiTree(T->lchild);
            CreateBiTree(T->rchild);
        }
    }
    
    // 先序遍历
    void PreOrderTraverse(BiTree T) {
        if (T) {
            cout << T->data << " ";
            PreOrderTraverse(T->lchild);
            PreOrderTraverse(T->rchild);
        }
    }
    
    // 中序遍历
    void InOrderTraverse(BiTree T) {
        if (T) {
            InOrderTraverse(T->lchild);
            cout << T->data << " ";
            InOrderTraverse(T->rchild);
        }
    }
    
    // 后序遍历
    void PostOrderTraverse(BiTree T) {
        if (T) {
            PostOrderTraverse(T->lchild);
            PostOrderTraverse(T->rchild);
            cout << T->data << " ";
        }
    }
    
    // 计算节点总数
    int NodeCount(BiTree T) {
        if (T == NULL)
            return 0;
        else
            return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
    }
    
    // 计算叶子节点总数
    int LeafCount(BiTree T) {
        if (T == NULL)
            return 0;
        else if (T->lchild == NULL && T->rchild == NULL)
            return 1;
        else
            return LeafCount(T->lchild) + LeafCount(T->rchild);
    }
    
    // 计算二叉树的深度
    int TreeDepth(BiTree T) {
        int d1, d2;
        if (T == NULL)
            return 0;
        else {
            d1 = TreeDepth(T->lchild);
            d2 = TreeDepth(T->rchild);
            if (d1 >= d2)
                return d1 + 1;
            else
                return d2 + 1;
        }
    }
    
    int main() {
        BiTree T;
        cout << "请输入建立二叉链表的前序序列:\n";
        CreateBiTree(T);
        cout << endl;
    
        cout << "先序遍历的结果为:\n";
        PreOrderTraverse(T);
        cout << endl << endl;
    
        cout << "中序遍历的结果为:\n";
        InOrderTraverse(T);
        cout << endl << endl;
    
        cout << "后序遍历的结果为:\n";
        PostOrderTraverse(T);
        cout << endl << endl;
    
        cout << "二叉树节点总数为: " << NodeCount(T) << endl << endl;
        cout << "二叉树叶子节点总数为: " << LeafCount(T) << endl << endl;
        cout << "二叉树的深度为: " << TreeDepth(T) << endl;
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 11月6日