当前位置:首页 > 牛客 > 牛客4499题解:二叉树中序遍历

牛客4499题解:二叉树中序遍历

2个月前 (07-22)

牛客4499题解:二叉树中序遍历 牛客题解 二叉树 中序遍历 递归 C++ 第1张

一、题目解读

牛客4499题要求模拟折纸过程并输出折痕方向。题目给定整数n表示折纸次数,需要生成一个包含"down"(下折)和"up"(上折)的序列,反映每次折纸后的折痕排列。该问题本质上是数学建模算法的结合,需找到递归规律或数据结构来模拟折纸过程。

二、解题思路

采用二叉树中序遍历作为核心解法。观察折纸过程可发现,每次折叠将纸张分为左右两部分,折痕作为“根节点”,左部分始终为下折,右部分为上折。这种结构天然符合二叉的中序遍历顺序(左子树→根节点→右子树),因此可通过递归实现中序遍历,记录折痕方向。

三、解题步骤

1. 边界处理:当n<1时直接返回空结果,避免无效输入。

2. 递归函数设计:定义inOrder函数,参数包括当前位置i、总次数n、当前折痕方向isDown、结果数组res。

3. 中序遍历模拟:

递归遍历左子树(i+1到n,方向始终为下折)。

○ 处理当前节点:根据isDown添加"down"或"up"到res。

○ 递归遍历右子树(i+1到n,方向为上折)。

4. 主函数调用inOrder(1, n, true),从根节点(第一次折痕为下折)开始遍历,生成最终序列。

四、代码与注释

class FoldPaper {
public:
    vector<string> foldPaper(int n) {
        vector<string> res;
        if (n < 1) return res; // 边界条件处理

        // 模拟折纸过程,实际上是中序遍历二叉树
        inOrder(1, n, true, res);  // 根节点是下折痕
        return res;
    }

    // 递归实现的中序遍历
    void inOrder(int i, int n, bool isDown, vector<string>& res) {
        if (i > n) return; // 递归终止条件

        inOrder(i + 1, n, true, res); // 遍历左子树(总是下折痕)
        res.push_back(isDown? "down" : "up");  // 当前节点
        inOrder(i + 1, n, false, res); // 遍历右子树(总是上折痕)
    }
};

五、总结

该解法巧妙将折纸问题转化为二叉树中序遍历,利用递归的简洁性高效解决问题。核心在于识别问题中的递归结构(折痕分层),并通过中序遍历顺序自然生成结果。此思路对理解算法建模与树结构应用具有启发意义,适合算法面试或练习中的思维训练。


原创内容 转载请注明出处

分享给朋友:

相关文章

征服力扣704题:三步掌握经典二分查找算法

征服力扣704题:三步掌握经典二分查找算法

题目重解我们面对的是算法领域最经典的二分查找问题:在一个已排序的整数数组中,快速定位目标值的位置。就像在一本按字母顺序排列的字典中查找单词,我们不需要逐页翻阅,而是通过不断折半的方式快速缩小搜索范围,...

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

题目重解给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们的目标是找到一条路径,使得路径上经过的数字总和最大。这个问题在实际中有许多应用场景,如最优路径规划、...

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

题目重解:数字三角形是一个经典的动态规划问题,给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们需要找到一条路径,使得路径上经过的数字总和最大。这个问题可以很...

牛客25665题详解:二叉树重建与三种遍历实现

牛客25665题详解:二叉树重建与三种遍历实现

一、题目解读牛客25665题要求根据给定的层序遍历和中序遍历序列重建二叉树,并输出:    1.所有叶子节点(从左到右)   &n...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

一、题目解读洛谷1184题要求处理一组地点列表与行程记录,统计其中匹配的天数。题目难点在于高效处理带有空格的字符串输入,以及快速判断每日行程是否在高手可去地点集合中。需要兼顾输入格式解析与算法效率。二...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。