求一个m叉树深度优先遍历的程序!多谢各位前辈。

yangxuefeng09 2015-10-09 08:39:05
要做的是这样的一件事情:

有一个m叉树,m是任意的一个数字,然后我想遍历这棵树,给树中的每个节点一个编码。


比如,如图的这样的一个树,我想遍历这棵树,然后给树中的每个节点一个编码【起始位置,结束位置】。

看这棵树的最左边。
比如第0层r这个根节点,深度优先遍历,第一次访问的时候的给一个数字做为它的起始位置,例如这里使用的是1,
第一层这个a节点给的起始位置是2,第二层这个a的起始位置是3,第三层c这个起始位置是4,第四层这个a的起始位置是5,
这个时候已经遍历到叶子节点了,接着要从第四层这个a节点返回,那么返回的时候第二次经过了a,那么第四层这个a节点
的结束位置就是6,然后向上返回到第三层的c,那么c的结束位置是7.。。。。。。等等



设置编码【起始位置,结束位置】,这个东西我可以解决。

但是m叉树我写不出来。求前辈帮忙,注意这棵树非常非常的大。但是深度不会超过10,m也不会超过10

实际上这个是一个XML文档转换成为一棵树。

我就是想遍历这棵树。

求一个程序 谢谢各位 拜谢
...全文
185 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2015-10-10
  • 打赏
  • 举报
回复
直接写个 preorder 的递归就行了吧,像这样

template <typename F>
void preorder (Node* const root, F const& visit)
{
 if (root == nullptr) { return; }
 visit(root);
 for (auto const child : root->children)
 {
  preorder(child,visit);
 }
}
yangxuefeng09 2015-10-10
  • 打赏
  • 举报
回复
引用 3 楼 qlee001 的回复:
m叉树,每个节点要有m个指针指向字节点, 怎么也要把Node的结构体给出来啊?
你好前辈 是这样的 ,看这个类的最后,有指向第一个孩子的指针,有指向最后一个孩子的指针,有指向父节点的指针,有 前一个兄弟的指针,有指向后一个兄弟的指针 类定义太大了 ,这里我只是取出了几个数据成员成员函数没有取出

protected:
	TiXmlNode( NodeType _type );

	// Copy to the allocated object. Shared functionality between Clone, Copy constructor,
	// and the assignment operator.
	void CopyTo( TiXmlNode* target ) const;

	#ifdef TIXML_USE_STL
	    // The real work of the input operator.
	virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0;
	#endif

	// Figure out what is at *p, and parse it. Returns null if it is not an xml node.
	TiXmlNode* Identify( const char* start, TiXmlEncoding encoding );

	TiXmlNode*		parent;
	NodeType		type;

	TiXmlNode*		firstChild;
	TiXmlNode*		lastChild;

	TIXML_STRING	value;

	TiXmlNode*		prev;
	TiXmlNode*		next;

private:
	TiXmlNode( const TiXmlNode& );				// not implemented.
	void operator=( const TiXmlNode& base );	// not allowed.
};

yangxuefeng09 2015-10-10
  • 打赏
  • 举报
回复
引用 5 楼 fly_dragon_fly 的回复:
直接dfs, 数据结构是怎么样的
protected:
	TiXmlNode( NodeType _type );

	// Copy to the allocated object. Shared functionality between Clone, Copy constructor,
	// and the assignment operator.
	void CopyTo( TiXmlNode* target ) const;

	#ifdef TIXML_USE_STL
	    // The real work of the input operator.
	virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0;
	#endif

	// Figure out what is at *p, and parse it. Returns null if it is not an xml node.
	TiXmlNode* Identify( const char* start, TiXmlEncoding encoding );

	TiXmlNode*		parent;
	NodeType		type;

	TiXmlNode*		firstChild;
	TiXmlNode*		lastChild;

	TIXML_STRING	value;

	TiXmlNode*		prev;
	TiXmlNode*		next;

private:
	TiXmlNode( const TiXmlNode& );				// not implemented.
	void operator=( const TiXmlNode& base );	// not allowed.
};
你好是这样的 谢谢
fly_dragon_fly 2015-10-10
  • 打赏
  • 举报
回复
直接dfs, 数据结构是怎么样的
qlee001 2015-10-09
  • 打赏
  • 举报
回复
m叉树,每个节点要有m个指针指向字节点, 怎么也要把Node的结构体给出来啊?
yangxuefeng09 2015-10-09
  • 打赏
  • 举报
回复
对了 这棵树的根节点是给定的 有一个Node * root 节点,是指向根节点的指针。其他的没有任何东西了,然后要去遍历这个m叉树
yangxuefeng09 2015-10-09
  • 打赏
  • 举报
回复
请不要把m叉树转变成为二叉树,这棵树的结果是不可以改变的 拜谢

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧