QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 738|回复: 3

c++二叉树问题

[复制链接]
发表于 2003-11-23 14:49:02 | 显示全部楼层 |阅读模式
the first file: tree.h
class tree
{
        public:
             tree *left;
             int id;
             int data;
             tree *right;
             tree()
             {
                     right = left = NULL;
             }
             ~tree()
             {
               
             }       
};

class treecreate:public tree
{
        public:
                treecreate();
            ~treecreate();
            void create(int *,int *,int len);
            tree * insert_node(int,int);
            void preorder(tree *);
            void inorder();
            void postorder();
            void searchid(int num);
            void searchdata(int datanum);
        void print();
        private:
                treecreate::tree *root;
};

the second file: tree.cpp
#include <iostream>
#include "tree.h"

using namespace std;

treecreate::treecreate()
{
        root = NULL;
}

treecreate::~treecreate()
{
       
}

void treecreate::create(int *id,int *data,int len)
{
        int i;
        for (i=0;i&lt;len;i++)
                root = insert_node(id,data);
}

tree * treecreate::insert_node(int nid,int ndata)
{
        tree *newnode;
        tree *currentnode;
        tree *parentnode;
       
        newnode = new tree;
       
        newnode -&gt; id = nid;
        newnode -&gt; data = ndata;
        newnode -&gt; left = NULL;
        newnode -&gt; right = NULL;
       
        if (root == NULL)
                root = newnode;
        else{
                currentnode = root;
                while (currentnode != NULL)
                {
                        parentnode = currentnode;
                        if(currentnode-&gt;id &gt; nid)
                                currentnode=currentnode-&gt;left;
                        else
                                currentnode=currentnode-&gt;right;
                }
                if (parentnode-&gt;id &gt; nid)
                        parentnode-&gt;left = newnode;
                else
                        parentnode-&gt;right=newnode;
        }
}

void treecreate::print()
{
        tree *point;
       
        point = root-&gt;left;
        cout &lt;&lt; "Print left_subtree node of root:" &lt;&lt; endl;
        while (point != NULL)
        {
                printf("[%2d]-",point-&gt;id);
                printf("[%2d]\n", point-&gt;data);
                point=point-&gt;left;
        }
        point = root-&gt;right;
        cout &lt;&lt; "Print right_subtree node of root:" &lt;&lt; endl;
        while (point != NULL)
        {
                printf("[%2d]-",point-&gt;id);
                printf("[%2d]\n",point-&gt;data);
        point-point-&gt;right;
        }
}

void preorder()
{
        tree *point;
        if (point != NULL)
        {
                printf("[%2d]-",point-&gt;id);
                printf("[%2d]\n",point-&gt;data);
                preorder(point-&gt;left);
                preorder(point-&gt;right);
        }
}

the third file: main.cpp
#include <iostream>
#include "tree.h"

using namespace std;

int main()
{
        treecreate p;
        int i,index;
        int Kid,Kdata;
        int idlist[20];
        int datalist[20];
       
        index = 0;
       
        cout &lt;&lt; endl &lt;&lt; "Enter ID:";
        cin &gt;&gt; Kid;

        cout &lt;&lt; endl &lt;&lt; "Enter DATA:";
        cin &gt;&gt; Kdata;
       
        while (1)
        {
                idlist[index] = Kid;
                datalist[index] = Kdata;
                index = index + 1;
                cout &lt;&lt; endl &lt;&lt; "Enter ID:";
                cin &gt;&gt; Kid;
                if (Kid == 0) break;
                cout &lt;&lt; endl &lt;&lt; "Enter DATA:";
                cin &gt;&gt; Kdata;
        }
       
        p.create(idlist,datalist,index);
        p.print();
}

我觉的程序,好像没有对root指针操作,因为无结果输出,原因是root=NULL。
高手指点一下啊!!! :-(  :-(  :-(  :-(  :-(
发表于 2003-11-23 22:29:14 | 显示全部楼层
你的函数你能编译通过?
你应该是根本没有编译通过或者说肯定是编译出错了吧?
tree * treecreate::insert_node(int nid,int ndata) 没有返回值吧
void treecreate::print() 打印逻辑肯定有错
首先:root没有打印
其次:打印节点,根本不是深度优先或者是广度优先
         只打印最左边和最右边的根节点
void preorder() 根本不能这么写
你认为它会调用 treecreate::preorder(point->left);么,
preorder(point->left)函数不是static类型啊
回复

使用道具 举报

 楼主| 发表于 2003-11-24 22:59:19 | 显示全部楼层
哈哈,那个没有改好!!!我知道print()函数是错的,我只是想看有没有结果输出。随便写的。
但是,我现在没有结果啊!!!那个函数的返回值我有写。我在贴好了。谢谢!!!
回复

使用道具 举报

 楼主| 发表于 2003-11-24 23:11:41 | 显示全部楼层
the first file: tree.h
struct tree
{
        int id;
        int data;
        tree *left;
        tree *right;
};

typedef struct tree treenode;
typedef treenode *b_tree;

class treecreate
{
        public:
                treecreate();
            ~treecreate();
            b_tree create(int *,int *,int len);
            b_tree insert_node(b_tree,int,int);
            void preorder(b_tree);
            void inorder();
            void postorder();
            void searchid(int num);
            void searchdata(int datanum);
        void print();
};

the second file: tree.cpp
#include <iostream>
#include "tree.h"

using namespace std;

treecreate::treecreate()
{
       
}

treecreate::~treecreate()
{
       
}

b_tree treecreate::create(int *id,int *data,int len)
{
        int i;
        b_tree root = NULL;
        for (i=0;i&lt;len;i++)
                root = insert_node(root,id,data);
        return root;
}
b_tree treecreate::insert_node(b_tree root,int nid,int ndata)
{
        b_tree newnode;
        b_tree currentnode;
        b_tree parentnode;
       
        newnode = new tree;
       
        newnode -&gt; id = nid;
        newnode -&gt; data = ndata;
        newnode -&gt; left = NULL;
        newnode -&gt; right = NULL;
       
        if (root == NULL)
                return newnode;
        else{
                currentnode = root;
                while (currentnode != NULL)
                {
                        parentnode = currentnode;
                        if(currentnode-&gt;id &gt; nid)
                                currentnode=currentnode-&gt;left;
                        else
                                currentnode=currentnode-&gt;right;
                }
                if (parentnode-&gt;id &gt; nid)
                        parentnode-&gt;left = newnode;
                else
                        parentnode-&gt;right=newnode;
        }
        return root;
}

/*void treecreate::print()
{       
        point = root-&gt;left;
        cout &lt;&lt; "Print left_subtree node of root:" &lt;&lt; endl;
        while (point != NULL)
        {
                printf("[%2d]-",point-&gt;id);
                printf("[%2d]\n", point-&gt;data);
                point=point-&gt;left;
        }
        point = root-&gt;right;
        cout &lt;&lt; "Print right_subtree node of root:" &lt;&lt; endl;
        while (point != NULL)
        {
                printf("[%2d]-",point-&gt;id);
                printf("[%2d]\n",point-&gt;data);
        point=point-&gt;right;
        }
}
*/

void treecreate::preorder(b_tree point)
{
        if (point != NULL)
        {
                printf("[%2d]-",point-&gt;id);
                printf("[%2d]\n",point-&gt;data);
                preorder(point-&gt;left);
                preorder(point-&gt;right);
        }
}

the third file: main.cpp
#include <iostream>
#include "tree.h"

using namespace std;

int main()
{
        treecreate p;
        b_tree kroot;
        int i,index;
        int Kid,Kdata;
        int idlist[20];
        int datalist[20];
       
        index = 0;
       
        cout &lt;&lt; endl &lt;&lt; "Enter ID:";
        cin &gt;&gt; Kid;

        cout &lt;&lt; endl &lt;&lt; "Enter DATA:";
        cin &gt;&gt; Kdata;
       
        while (1)
        {
                idlist[index] = Kid;
                datalist[index] = Kdata;
                index = index + 1;
                cout &lt;&lt; endl &lt;&lt; "Enter ID:";
                cin &gt;&gt; Kid;
                if (Kid == 0) break;
                cout &lt;&lt; endl &lt;&lt; "Enter DATA:";
                cin &gt;&gt; Kdata;
        }
       
        kroot = p.create(idlist,datalist,index);
        p.preorder(kroot);
}

我搞定了,我用前序遍历可以了,不过,那个print()函数没有改,我注释掉了!!!谢谢!!!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-9 10:35 , Processed in 0.057490 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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