【问题描述】[中等]
【解答思路】
深度遍历/递归
- 终止条件与返回值:
当两棵树的当前节点都为 null 时返回 true
当其中一个为 null 另一个不为 null 时返回 false
当两个都不为空但是值不相等时,返回 false
- 执行过程:当满足终止条件时进行返回,不满足时分别判断左子树和右子树是否相同
时间复杂度:O(N) 空间复杂度:O(1)
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {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;return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);}
}
【总结】
1. 二叉树算法框架
void traverse(TreeNode root) {// root 需要做什么?在这做。// 其他的不用 root 操心,抛给框架traverse(root.left);traverse(root.right);
}