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

本文介绍了如何使用链式和顺序存储结构遍历森林以求其高度。采用兄弟孩子链表表示法,通过输入森林的扩展先序遍历线性串来构建数据。算法设计包括递归遍历和层次遍历两种方法,其中递归遍历通过赋予左子树权重1,右子树权重0来确定森林高度。层次遍历则利用队列实现。详细设计部分涉及森林链表的构造、析构、建立和遍历等操作。

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

一、概要设计

测试数据:如图所示森林
在这里插入图片描述
森林采用兄弟孩子链表表示法。
森林的数据输入采取输入兄弟孩子链表表示法下的等价二叉树的扩展先序遍历形成的线性串的方法(原理为森林先序遍历结果与等价二叉树的先序遍历结果相同)
在这里插入图片描述
输入数据: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;
};
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值