freemandj 2021-03-21 16:33 采纳率: 100%
浏览 24
已结题

关于二叉排序树,没有错误却输不出任何结果,C++,求帮忙改改可以输出结果

     #include<iostream>
    #include<string>
    #include<vector>

    #include<algorithm>
    using namespace std;

    class TreeNode
    {
    public:
        int data;
        TreeNode *left, *right;
        TreeNode() {
        left = right = NULL;
        data=0;
         }
    };
    class BSTree
    {
    public:
        TreeNode *root;

        BSTree() { root = NULL; }
        void AddintoTree(int num)
        {
            TreeNode *t = root;
            while (true)
            {
                if (num < t->data)
                {
                    if (t->left == NULL)
                    {
                        t->left = new TreeNode;
                        t->left->data = num;
                        return;
                    }
                    else
                    {
                        t = t->left;
                    }
                }
                else
                {
                    if (t->right == NULL)
                    {
                        t->right = new TreeNode;
                        t->right->data = num;
                        return;
                    }
                    else
                    {
                        t = t->right;
                    }
                }
            }
        }
        void Preorder(TreeNode *root, vector<int> &ans) //递归前序
    {
        if (root == NULL)
            return;

        ans.push_back(root->data);
        Preorder(root->left, ans);
        Preorder(root->right, ans);
    }
    void Inorder(TreeNode *root, vector<int> &ans) //递归中序
    {
        if (root == NULL)
            return;

        Inorder(root->left, ans);
        ans.push_back(root->data);
        Inorder(root->right, ans);
    }

    void Postorder(TreeNode *root, vector<int> &ans) //递归后序
    {
        if (root == NULL)
            return;

        Postorder(root->left, ans);
        Postorder(root->right, ans);
        ans.push_back(root->data);
    }
    TreeNode *search(int value){
        TreeNode *p=root;
        while(p!=NULL||p->data==value){
        if(value<p->data){
            p=p->left;
        }    
        else{
            p=p->right;
        }    
        }
        return p;
    }
    TreeNode *findmax(){
        TreeNode *p=root;
        while(p!=NULL){
            p=p->left;
        }
        return p;
    }

    };
    int main(){
        BSTree bstree;
        bstree.AddintoTree(1);
         bstree.AddintoTree(2);
              bstree.AddintoTree(9);
                   bstree.AddintoTree(7);
                        bstree.AddintoTree(8);
                             bstree.AddintoTree(4);
                       
        vector<int> ans;
        bstree.Inorder(bstree.root,ans);
        vector<int>:: iterator it;
        for(it=ans.begin();it!=ans.end();it++){
            cout<<*it;
        }
        TreeNode *treenode;
        treenode=bstree.findmax();
        cout<<treenode->data;


        

    • 写回答

    1条回答 默认 最新

    • 幻灰龙 2021-03-22 09:03
      关注

      你可以增加一个打印二叉树的函数 Dump

      然后每个函数单独测试,例如调用  bstree.AddintoTree(1); 后调用 bstree.Dump(),其他代码先注释掉。

      这样逐个测试,看看哪里开始不对。

      本回答被题主选为最佳回答 , 对您是否有帮助呢?
      评论

    报告相同问题?

    问题事件

    • 系统已结题 9月14日
    • 已采纳回答 9月6日

    悬赏问题

    • ¥15 基于作物生长模型下,有限水资源的最大化粮食产量的资源优化模型建立
    • ¥20 关于变压器的具体案例分析
    • ¥15 生成的QRCode圖片加上下載按鈕
    • ¥15 板材切割优化算法,数学建模,python,lingo
    • ¥15 科来模拟ARP欺骗困惑求解
    • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
    • ¥15 unity连接Sqlserver
    • ¥15 图中这种约束条件lingo该怎么表示出来
    • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
    • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式