#LeetCode每日一题【二叉树专题】
相同的树
https://leetcode-cn.com/problems/same-tree/分析
判断两棵树是否相等,即根节点一样、左子树一样、右子树一样;左子树和右子树也是同样的处理方式,很明显是一个递归程序实现
// 相同的树:切分成子问题,根节点一样的情况下,比较左子树,在比较右子树,最后综合结果;
// 递归不用考虑太多细节,只需考虑当前层级应该做啥::拿到左右子树的比较结果综合~~~
public boolean isSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) {
return true;
}
if (p == null || q == null) {
return false;
}
if (p.val != q.val) {
return false;
}
boolean left = isSameTree(p.left, q.left);
boolean right = isSameTree(p.right, q.right);
return left && right;
}
LeetCode耗时:0ms
对称二叉树
https://leetcode-cn.com/problems/symmetric-tree/分析
判断一棵树是否是对称树:根节点相同的情况下,看左右子树两棵树是否对称,即左子树的左节点等于右子树的右节点,左子树的右节点等于右子树的左节点。
其实跟上面的相同二叉树很类似,相同二叉树是两棵树的左左比较、右右比较;对称二叉树是两棵树的左右比较、右左比较。实现
private boolean isSymmetric(TreeNode left, TreeNode right) {
if (left == null && right == null) {
return true;
}
if (left == null || right == null) {
return false;
}
if (left.val != right.val) {
return false;
}
// 两棵树是否对称,1. 根节点一样 2. 左右节点错开相等
return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}
LeetCode耗时:0ms
总结
通过这两道相似的简单题,理解如何找到树的递归点,首先树天然就是一个递归的框架,左子树、右子树都可以看做成一颗新树,如果发现他们的处理逻辑和原树的逻辑相同,则可以使用递归。
最关键的还是要明确解决该问题的思路,有思路之后再考虑使用何种数据结构,再将思路转换为代码实现。



