代码随想录——相同的树

题目

给定两个二叉树,编写一个函数来检验它们是否相同
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的
在这里插入图片描述

思路

递归三部曲:

  1. 确定递归函数的参数和返回值
    比较两个树是否是相互相同的,参数就是两个数的根节点,返回值为boolean类型

  2. 确定终止条件
    首先先单独处理两个节点有空节点的情况,避免后面比较数值的时候操作空指针
    节点有空的情况为:
    (1)tree1为空,tree2不为空,不对称,return false
    (2)tree1不为空,tree2为空,不对称 return false
    (3)tree1,tree2都为空,对称,返回true
    排除了节点有空的情况,剩下的就是两个节点都不为空的情况:tree1、tree2都不为空,比较节点数值,不相同就return false

  3. 确定单层递归的逻辑
    比较二叉树是否相同,如果左右相同就返回true,有一侧不相同就返回false

java代码如下:

//递归法
class Soultion {
	public boolean isSameTree(TreeNode p,TreeNode q){
		if(p == null && q == null) return true;
		else if(q == null || p == null) return false;
		else if(q.val != p.val) return false;
		return isSameTree(q.left,p.left) && isSameTree(q.right,p.right);
	}
}

//迭代法
class Solution{
	public boolean isSameTree(TreeNode p,TreeNode q){
		if(p == null || q == null) return false;
		if(p == null && q == null) return false;
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		queue.offer(p);//代表左子树
		queue.offer(q);//代表右子树
		while(!queue.isEmpty()){
			TreeNode leftNode = queue.poll();//取左子树
			TreeNode rightNode = queue.poll();//取右子树
			if(leftNode == null && rightNode == null) continue;
			if(leftNode == null || rightNode == null || leftNode.val != rightNode.val) return false;
			queue.offer(leftNode.left);
			queue.offer(rightNode.left);
			queue.offer(leftNode.right);
			queue.offer(rightNode.right);
		}
		return true;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HDU-五七小卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值