一、题目
演示示例:
二、测试代码
//深度优先搜索
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) {//两棵树结点同时为空即遍历完毕即两棵树相同
return true;
} else if (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);//两棵树同时向左右子树遍历递归
}
}
}
三、运行情况
四、刷题总结
本题的主要思路:若两个二叉树都为空,则两个二叉树相同;若两个二叉树中有且只有一个为空,则两个二叉树一定不相同;若两个二叉树都不为空,则先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同和右子树是否相同。我们可以使用递归来实先判断两个二叉树是否相同。