算法中的二叉树问题
假设自上而下按层次,自左至右输入每个结点的一个三元组(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 );
}
// ... ...
};