一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
leetcode刷题100相同的树
前文
本题目为leetcode二叉树比较类型题目,题目序号为100,题目链接https://leetcode-cn.com/problems/same-tree/,该题目难度为简单,主要考察二叉树基础结构的理解以及二叉树比较的相关知识。
题目信息
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
解题思路
根据题目信息,很明显这是一道二叉树类型的问题,主要是基于二叉树的基础结构的二叉树比较问题。首先来复习一下二叉树的相关知识,通俗来讲,二叉树就是一个树形结构,每个节点至多有两个子节点,空节点无法再拥有子节点。结合题目信息与二叉树的定义,我们很容易想到,解决该问题需要将两个二叉树的每一个节点都进行比较处理。题目中每个二叉树节点都包含一个val值,那么只要节点是否为空保持一致,且当节点不为空时,节点值相等即可认为两个二叉树相等。考虑一些特殊的情况,可能两个节点都为空,或一个节点为空另一个节点不为空,这种情况下贸然获取节点值存在空指针的风险,因此要对这些情况进行特殊的处理。那么下面关键的问题来了,如何遍历整个二叉树呢?本答案主要采用递归的思路进行解答。当当前节点不满足相等时,直接返回不满足即可。而当当前节点满足时,则要对当前节点的左节点、右节点同时递归计算是否满足题目要求。以此方式,直至整个二叉树遍历完毕。这样也就得到了两个二叉树是否为相等的二叉树的答案。解决该题目的核心在于二叉树的递归比较,以及对一些特殊情况的额外处理。
解题代码
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null){
return true;
}else if(p == null && q != null || p != null && q == null){
return false;
}else if(p.val != q.val){
return false;
}else{
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
}
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。