qq_39677327 2022-05-20 17:20 采纳率: 94.9%
浏览 87
已结题

代码完善数据结构二叉树

建立一棵二叉树,树的形态自定,完成以下操作:
(1)输出该二叉树的前序遍历序列;
(2)输出该二叉树的中序遍历序列;
(3)输出该二叉树的后序遍历序列。

代码完善

#include<iostream>
using namespace std;

struct BTree
{
    char data;
    BTree *lchild, *rchild;
};

class Tree
{
public:
    Tree() { root = Create(root); }
    ~Tree() { relase(root); }
    void preorder() { preorder(root); }
    void inorder() { inorder(root); }
    void postorder() { postorder(root); }
private:
    BTree *root;
    BTree *Create(BTree *t);
    void relase(BTree *t) ;
    void preorder(BTree *t);
    void inorder(BTree *t);
    void postorder(BTree *t);
};

BTree *Tree::Create(BTree *t)
{
    char ch;
    cin >> ch;//输入结点
    if (ch == '#')
    {
        t = NULL;
    }
    else
    {
        t = new BTree;
        t->data = ch;
        t->lchild = Create(t->lchild);
        t->rchild = Create(t->rchild);
    }
    return t;
}

void Tree::preorder(BTree *t)
{
    if (t == NULL)
    {
        return;
    }
    else
    {
        cout << t->data;
        preorder(t->lchild);
        preorder(t->rchild);
    }
}

int main()
{
    cout << "请输入二叉树的结点数据:";
    Tree A;
    cout << "前序遍历为:" << endl;
    A.preorder();
    cout << "中序遍历为:" << endl;
    A.inorder();
    cout << "后序遍历为:" << endl;
    A.postorder();
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 关注
    #include<iostream>
    using namespace std;
    
    struct BTree
    {
        char data;
        BTree *lchild, *rchild;
    };
    
    class Tree
    {
    public:
        Tree() { root = Create(root); }
        ~Tree() { relase(root); }
        void preorder() { preorder(root); }
        void inorder() { inorder(root); }
        void postorder() { postorder(root); }
    private:
        BTree *root;
        BTree *Create(BTree *t);
        void relase(BTree *t) ;
        void preorder(BTree *t);
        void inorder(BTree *t);
        void postorder(BTree *t);
    };
    
    BTree *Tree::Create(BTree *t)
    {
        char ch;
        cin >> ch;//输入结点
        if (ch == '#')
        {
            t = NULL;
        }
        else
        {
            t = new BTree;
            t->data = ch;
            t->lchild = Create(t->lchild);
            t->rchild = Create(t->rchild);
        }
        return t;
    }
    
    void Tree::preorder(BTree *t)
    {
        if (t == NULL)
        {
            return;
        }
        else
        {
            cout << t->data;
            preorder(t->lchild);
            preorder(t->rchild);
        }
    }
    void Tree::inorder(BTree *t)
    {
        if (t == NULL)
        {
            return;
        }
        else
        {
            inorder(t->lchild);
            cout << t->data;
            inorder(t->rchild);
        }
    }
    void Tree::postorder(BTree *t)
    {
        if (t == NULL)
        {
            return;
        }
        else
        {
            postorder(t->lchild);
            postorder(t->rchild);
            cout << t->data;
        }
    }
    
    void Tree::relase(BTree *t)
    {
        if (t == NULL)
        {
            return;
        }
        else
        {
            relase(t->lchild);
            relase(t->rchild);
            delete t;
        }
    }
    
    int main()
    {
        cout << "请输入二叉树的结点数据:";
        Tree A;
        cout << "前序遍历为:" << endl;
        A.preorder();
        cout << endl;
    
        cout << "中序遍历为:" << endl;
        A.inorder();
        cout << endl;
    
        cout << "后序遍历为:" << endl;
        A.postorder();
        return 0;
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月20日

悬赏问题

  • ¥15 DSP28335AD采集实验
  • ¥15 在winods上用C# 怎么编写CAN通信在linux运行
  • ¥15 关于螺旋焊缝的图像处理
  • ¥15 qt 散点图自定义图形
  • ¥100 将USDZ文件转化为带颜色的OBJ文件
  • ¥15 对象代号: , 表单: 不存在!
  • ¥15 WebSocket的问题
  • ¥15 centos上启动kylin后网页报错404
  • ¥20 使用hackrf进行信号收发时接收到的信号幅度太小
  • ¥15 WebSocket的问题