| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 947 人关注过本帖
标题:麻烦大家做做这题,关于树成员函数的
只看楼主 加入收藏
shuimiu1988
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-12-1
收藏
 问题点数:0 回复次数:8 
麻烦大家做做这题,关于树成员函数的
1、实现树类Tree的成员函数void
 InsertChild(T value),即在当前
结点之下,插入一个数据值为value
的结点,作为当前结点的最右边的子
结点;
    2、实现树类Tree的成员函数int
DeleteChild(int i),即删除当前结
点的第i个子结点及其所有子树。
搜索更多相关主题的帖子: 函数 成员 麻烦 
2008-12-02 11:46
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
完全就是个单链表的操作。
2008-12-02 19:44
shuimiu1988
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-12-1
收藏
得分:0 
回复 第2楼 geninsf009 的帖子
那你就做做吧
2008-12-03 08:10
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
呵呵,树虽然用的是firstChild-nextSibling的二叉链表,但是在你说的这两个问题里,除了在第一个孩子结点要涉及到firstChild指针域,其他只涉及到nextSibling。所以我说,完全就是个单链表的问题。
/////////////////////////////////////////////////////
//InsertChild()公有成员函数
//插入结点,值为value,作为current结点的最后一个子结点
/////////////////////////////////////////////////////
template<class T>
void Tree<T>::InsertChild(const T& value)
{
    TreeNode<T>* newNode=new TreeNode<T>(value);
    if(current->firstChild==NULL)      //如果没有子结点
        current->firstChild=newNode;
    else
    {
        TreeNode<T>* ptr=              //游标指针,指向第一个子结点
            current->firstChild;
        while(ptr->nextSibling!=NULL)
            ptr=ptr->nextSibling;
        ptr->nextSibling=newNode;
    };
};
////////////////////////////////InsertChild()函数结束
2008-12-03 09:37
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
这是删除的算法,有比较完整的标号越界控制:
/////////////////////////////////////////////////////
//DeleteChild()公有成员函数
//删除当前结点current的第i个子结点
/////////////////////////////////////////////////////
template<class T>
bool Tree<T>::DeleteChild(int i)
{
    if(i<1
        || current->firstChild==NULL)  //标号出错
        return false;
    if(i==1)                           //如果要删除的就是第一个孩子结点
    {
        current->firstChild=
            current->firstChild->nextSibling;      
        return true;                   //删除成功
    };
    TreeNode<T>* ptr=
        current->firstChild;           //游标指针,从第一个孩子结点开始
    int count=2;
    while(ptr->nextSibling!=NULL)      //寻找要删除结点的前驱结点
    {
        if(i==count)                   //如果找到
            break;
        ptr=ptr->nextSibling;
        count++;
    };

    if(i>=count)                       //如果给出的孩子结点标号越界
    {
        cout<<"输入的下标越界!"<<endl;
        return false;                  //删除失败
    }
    TreeNode<T>* del=ptr->nextSibling; //删除ptr的后继结点(即指定的结点)
    ptr->nextSibling=
        ptr->nextSibling->nextSibling;
    delete del;
   
    return true;
};
/////////////////////////////////Deletehild()函数结束
2008-12-03 09:39
shuimiu1988
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-12-1
收藏
得分:0 
回复 第5楼 geninsf009 的帖子
谢谢谢谢!!我最近开始学数据结构,感觉有点难。麻烦能将的经验吗?十分感谢!!!!!!
2008-12-03 12:35
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
先学好一门语言,在去好好编写算法。
2008-12-03 18:43
shuimiu1988
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-12-1
收藏
得分:0 
回复 第7楼 geninsf009 的帖子
关于算法能推荐几本好书吗?谢谢了
2008-12-03 18:49
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
《算法导论》,数据结构就选铁道出版社的那本吧,都说那本书很通俗易懂。
虽然我自己每有看过,但看过的都说好。

[[it] 本帖最后由 geninsf009 于 2008-12-3 20:04 编辑 [/it]]
2008-12-03 19:22
快速回复:麻烦大家做做这题,关于树成员函数的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016816 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved