【数据结构】 顺序、链式存储结构的森林递归遍历、层次遍历求高度

降维问题:顺序、链式存储结构的二叉树递归遍历、层次遍历求高度
全部源代码在最后

一、概要设计

测试数据:如图所示森林
在这里插入图片描述
森林采用兄弟孩子链表表示法。
森林的数据输入采取输入兄弟孩子链表表示法下的等价二叉树的扩展先序遍历形成的线性串的方法(原理为森林先序遍历结果与等价二叉树的先序遍历结果相同)
在这里插入图片描述
输入数据:ABEK..F..CG..DH.I.J...L.MN...

算法设计

以链式存储结构为例
递归遍历求高度:由于孩子兄弟链表表示法是把兄弟当儿子,所以对应二叉树的所有左子树的最大高度便是森林的高度。这样,在求二叉树高度的算法上可以改进,将左子树给定权重1,右子树给定权重0;即只需

if(root == NULL) return 0;
return max(GetHeightByRecursion(root->firstson) + 1, GetHeightByRecursion(root->nextbrother));

层次遍历求高度:利用队列,将第一个儿子入队,再进行一系列循环操作

实验结果

在这里插入图片描述

二、 详细设计

1. 链式存储结构

  • 森林链表
template<typename T>
struct ForestNode
{
	T data;
	ForestNode<T>* firstson;
	ForestNode<T>* nextbrother;
	ForestNode()
	{
		firstson = NULL;
		nextbrother = NULL;
	}
};
  • 森林类
template<typename T>
class Forest
{
public:
	Forest() {};
	~Forest(){};
	ForestNode<T>* getFirstTreeRoot(){};
	void build(ForestNode<T>* & node){};
	void deleteAll(ForestNode<T>* node){};
	int LevelTraversalAndReturnHeight(ForestNode<T>* root){};
	int GetHeightByRecursion(ForestNode<T>* root){};
private:
	ForestNode<T>* FirstTreeRoot;
};
  • 构造函数
 Forest() 
	{
		Fir
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值