首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

算法中的二叉树有关问题

2013-10-29 
算法中的二叉树问题假设自上而下按层次,自左至右输入每个结点的一个三元组(N, P, L/R)。其 中N为本结点的元

算法中的二叉树问题
假设自上而下按层次,自左至右输入每个结点的一个三元组(N, P, L/R)。其 中N为本结点的元素,P为其父结点,L指示N为P 的左孩子,R指示N为P 的右孩子。试写一个建立二元树在内存的双链表示算法,并实现先根、中根、后 根以及层序遍历算法。 
请问 “建立二元树在内存的双链表示算法” 是什么意思?我连题目都读不懂啊 二叉树 算法 内存 链表 遍历
[解决办法]
二元树 ,二叉树,对应的英文是相同的吧。这估计是翻译问题.
二叉树可以用二叉链表和三叉链表表示。

二叉链表 两个指针: lchild,rchild 
三叉链表 三个指针: parent,lchild,rchild 

建立二元树在内存的双链表示算法,应该就是,二叉链表表示的,二叉树的创建算法。

不过,要从文件读数据,并按照指定位置插入节点。

没有说明 P是节点在文件中相对或者绝对偏移量,还是节点的元素;
你再仔细检查一下,题目,估计是元素。

不会是指针,因为指针存储后,读出时,不可能原样分配到同一位置。

通常提到的二叉树,都是二叉链表表示的。

[解决办法]
一个简单的方式,使用数组或者队列处理输入
输入完成整理成二叉树。
[解决办法]

class Bintree
{
protected:
    class BintreeNode
    {
        friend class Bintree;
    protected:
        int  N;
        BintreeNode * parent;
        BintreeNode * leftchild;
        BintreeNode * rightchild;

        explicit BintreeNode( BintreeNode * p = NULL )
           : parent( p )
           , leftchild( NULL )
           , rightchild( NULL )
        {
        }
        ~BintreeNode()
        {
            if( leftchild )
                delete leftchild;
            if( rightchild )
                delete rightchild;
        }
    };
    BintreeNode * m_pRoot;

public:
    Bintree() : m_pRoot( NULL ) {}
    ~Bintree()  { if( m_pRoot ) delete m_pRoot; }

    BintreeNode * Insert( int N, BintreeNode * pNode = NULL );
    void          Remove( BintreeNode * pNode );
    void          RemoveAll();
    BOOL          IsEmpty() const
    {
         return ( m_pRoot == NULL );
    }
    // ... ...
};

热点排行