VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 816|回复: 4

二叉树建立问题(急求帮助)

[复制链接]

3

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-10-3 23:30:01 | 显示全部楼层 |阅读模式
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");

template<class T>
class BinaryTree;

template<class T>
class BadInput
{
        friend class BinaryTree<T>;
        public:
                BadInput()
                {
                        cout<<"BadInput"<<endl;
                }
};

template<class T>
class BinaryTreeNode
{
        friend class BinaryTree<T>;
        public:
                BinaryTreeNode()
                {
                        LeftChild = RightChild = 0;
                }

                BinaryTreeNode(const T& e)
                {
                        this->data = e;
                        this->LeftChild = 0;
                        this->RightChild = 0;
                }
               
                BinaryTreeNode(const T& e, BinaryTreeNode* l, BinaryTreeNode * r)
                {
                        this->data = e;
                        this->LeftChild = l;
                        this->RightChild = r;
                }
               
                void SetData(const T& e)
                {
                        this->data = e;
                }
                T GetData()
                {
                        return this->data;
                }
        private:
                T data;
                BinaryTreeNode<T> *LeftChild;
                BinaryTreeNode<T> *RightChild;
};


template<class T>
class BinaryTree
{
        public:
                BinaryTree()
                {
                        this->root = 0;
                }

                ~BinaryTree()
                {
                }

                void MakeTree(const T& element, BinaryTree<T>& left, BinaryTree<T>& right);

                void PreOrder( void (*Visit)(BinaryTreeNode<T> *u) )
                {
                        this->PreOrder(Visit,root);
                }

                void PreOutPut(void)
                {
                        PreOrder(Output, root);
                        cout<<endl;
                }

        private:
                BinaryTreeNode<T>* root;
               
                void PreOrder(void (*Visit)(BinaryTreeNode<T> *u), BinaryTreeNode<T>* t);
               
                static void Output(BinaryTreeNode<T>* t)
                {
                        out<< t->data << ' ';
                }
};


template <class T>
void BinaryTree<T>::MakeTree(const T& element, BinaryTree<T>& left, BinaryTree<T>& right)
{
        root = new BinaryTreeNode<T>(element, left.root, right.root);
        left.root = 0;
        right.root = 0;
}

template <class T>
void BinaryTree<T>::PreOrder(void (*Visit)(BinaryTreeNode<T> *u), BinaryTreeNode<T>* t)
{
        if(t)
        {
                Visit(t);
                PreOrder(Visit, t->LeftChild);
                PreOrder(Visit, t->RightChild);
        }
}


void main()
{
        if ( in.fail() )
        {
                cout<<"the input.txt is not exist!";
                exit(1);
        }

        int iLine;
        in>>iLine;
       
        int iRealLine = iLine + 1;
        BinaryTreeNode<int> (*piNode)[3] = new BinaryTreeNode<int>[iRealLine][3];
        for(int i = 0; i < iRealLine; i++)
        {
                int a, b, c;
                in>>a >>b >>c;
                piNode[i][0].SetData(a);
                piNode[i][1].SetData(b);
                piNode[i][2].SetData(c);
        }

        BinaryTree<int>* piTree = new BinaryTree<int>[iRealLine];
        for(int j = iRealLine-1 ; j >=0; j--)
        {
                int a = piNode[j][0].GetData();
                int b = piNode[j][1].GetData();
                int c = piNode[j][2].GetData();
               
                piTree[a].MakeTree(a , piTree[b], piTree[c]);
        }

        piTree->PreOutPut();
}

数据(input.txt)

9
1 2 3
2 4 5
3 6 7
4 8 9
5 0 0
6 0 0
7 0 0
8 0 0
9 0 0

问题:无法输出结果,怎么改?
回复

使用道具 举报

0

主题

19

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-10-3 23:45:01 | 显示全部楼层
单步调试。
回复

使用道具 举报

0

主题

36

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-10-4 01:00:01 | 显示全部楼层
piTree[a].MakeTree(a , piTree[b], piTree[c]);
后piTree的root为空
回复

使用道具 举报

3

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-10-4 03:15:01 | 显示全部楼层
还是不清楚,要怎么改呢??
回复

使用道具 举报

0

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-10-4 06:30:01 | 显示全部楼层
自己先做几个 assert。判断一下问题在哪。然后单步调试。这个体力活只能楼主自己先干一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表