SameTree解法思路及源代码

今天做的是LeetCode100,判断两棵二叉树是否相等。

在写完自己的代码之后和大神代码进行比对,发现这个问题的解决手法都是差不多的

一开始想找有没有简便算法

比如先判断结构再判断值

可是发现无论用哪一种都需要递归到最底层,那还不如在递归的时候完成值是否相等的判断

所以得到以下代码:

public class Solution {
	public boolean isSameTree(TreeNode p, TreeNode q) {
        return isSameTreeNode(p,q);
    }
	public boolean isSameTreeNode(TreeNode p, TreeNode q) {
		if(p==null&&q==null)
        	return true;
        if(p==null||q==null||(p.val!=q.val))
        	return false;
        else
        	return isSameTreeNode(p.left, q.left)&&isSameTreeNode(p.right, q.right);
    }
}

递归写在一个方法里面也是可以的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非线性方程数值解法: 1.二分法:这是一种最简单的数值解法,但它收敛速度较慢,只有在函数单调性和连续性的条件下才能使用。 2.牛顿法:利用曲线的切线来逼近方程的根,需要一阶导数存在且连续。 3.割线法:牛顿法的改进版,使用两个点来逼近方程的根。 4.弦截法:割线法的改进版,使用一个点和斜率来逼近方程的根。 5.迭代法:通过不断逼近根来求解方程,需要选择合适的迭代函数。 非线性方程组的几种数值解法: 1.牛顿法:将非线性方程组转化为一个线性方程组,需要计算雅可比矩阵。 2.拟牛顿法:与牛顿法类似,但是不需要计算雅可比矩阵。 3.高斯-赛德尔迭代法:将方程组的解逐个逼近。 4.雅可比迭代法:将方程组的每个未知数的解逐个逼近。 这里提供一个使用牛顿法求解非线性方程组的 Matlab 源代码: ```matlab function [x,iter]=newton(f,df,x0,tol,maxiter) % f:目标函数 % df:目标函数的一阶导数 % x0:初值 % tol:误差容限 % maxiter:最大迭代次数 % x:方程的解 % iter:迭代次数 x=x0; iter=0; while norm(f(x))>tol && iter<maxiter x=x-inv(df(x))*f(x); iter=iter+1; end if iter==maxiter fprintf('迭代次数达到上限,可能无解或解收敛缓慢!\n'); else fprintf('迭代成功,迭代次数:%d\n',iter); end end ``` 使用方法: 1.定义目标函数和一阶导数 例如,求解方程组 $\begin{cases}x^2+y^2=1\\x-y=0\end{cases}$,定义目标函数和一阶导数: ```matlab f=@(x)[x(1)^2+x(2)^2-1;x(1)-x(2)]; df=@(x)[2*x(1),2*x(2);1,-1]; ``` 2.设置初值、误差容限和最大迭代次数 例如,设置初值 $x_0=[1;1]$,误差容限 $10^{-6}$,最大迭代次数 $100$: ```matlab x0=[1;1]; tol=1e-6; maxiter=100; ``` 3.调用函数求解 ```matlab [x,iter]=newton(f,df,x0,tol,maxiter); ``` 完整代码: ```matlab clear;clc; f=@(x)[x(1)^2+x(2)^2-1;x(1)-x(2)]; df=@(x)[2*x(1),2*x(2);1,-1]; x0=[1;1]; tol=1e-6; maxiter=100; [x,iter]=newton(f,df,x0,tol,maxiter); fprintf('方程的解为:\n'); disp(x); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值