树专题-树的简单递归

关于树的算法题,最最简单入门的思路就是运用递归思想,下面放几道运用递归解决简单的LeetCode 二叉树题



题目大意就是判断了给定的两棵二叉树是否为相同,(对应所在节点值都相同则两科树则相同)
思路很简单:递归遍历两颗二叉树判断当前值是否相等。然后把结果返回




题目大意就是给定一棵二叉树,判断他是否对称。
思路:很容易想到题目可以看做判断根节点的左右子树是否对称(相等)。所以可以运用上面的代码,判断两个树是否相等,但是有所不一样的就是:对称需要左子树的左孩和右子树的右孩相等,以此类推,左子树的右孩和右子树的左孩相等。所以判断是否相同树时,传递的参数需要有所变化。




### 关于递归算法的实训资料与教程 #### 1. 基础概念理解 递归是指程序调用自身的编程技巧,通常用于解决问题可以自然地划分为更小的相似子问题的情况。递归的核心在于分治法的应用,即通过将复杂的问题分解成简单的子问题来逐步解决整个问题[^3]。 #### 2. 经典案例解析——汉诺塔游戏 对于初学者来说,汉诺塔问题是理解和实践递归的好例子。该问题描述为:给定三根杆(分别标记为A、B、C),以及若干不同大小的圆盘按照从大到小堆叠在一根杆上。目标是在遵循特定规则的情况下将所有圆盘转移到另一根指定的目标杆上。具体步骤如下: - 如果只有一个圆盘,则直接将其由源柱移动到目的柱; - 否则先利用辅助柱作为中介,依次完成两个阶段的任务: - 将上面\( n-1 \)个较小的圆盘借助第三根柱子搬到中间柱上去; - 把剩下的最大那个单独一片移到目的地那边去; - 再次运用前两步操作方式把之前留在临时位置的小圆片们全部搬过来放在最大的下面形成完整的序列[^5]。 ```java public class HanoiTower { public static void moveDisks(int numberOfDisks, char fromRod, char toRod, char auxRod){ if (numberOfDisks == 1){ System.out.println("Move disk 1 from rod " + fromRod +" to rod "+toRod); return; } moveDisks(numberOfDisks - 1, fromRod, auxRod, toRod); // Move n-1 disks from A to B using C as auxiliary. System.out.println("Move disk " + numberOfDisks + " from rod " + fromRod+" to rod "+toRod); moveDisks(numberOfDisks - 1, auxRod, toRod, fromRod); // Move the remaining n-1 disks from B to C using A as auxiliary. } public static void main(String[] args){ int num_of_disks = 3; // Number of disks can be changed here. moveDisks(num_of_disks,'A','C','B'); // Call function with source 'A', destination 'C' and auxiliary 'B'. } } ``` #### 3. 进阶练习项目建议 除了上述提到的基础实例之外,还可以尝试更多类型的题目来进行深入学习,例如但不限于: - 计算斐波那契数列中的某一项值。这不仅有助于熟悉递归机制本身,而且还能帮助了解其性能特点及其优化方向[^4]。 ```python def fibonacci(n): if n <= 0: return "Input should be positive integer." elif n == 1 or n == 2: return 1 else: return fibonacci(n-1) + fibonacci(n-2) print(fibonacci(10)) ``` - 探索结构相关的遍历方法,像前序/中序/后序遍历等都是基于递归来实现的良好范例之一[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值