题目描述
分析
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
};
题目给的是两棵树的 root,p,q
解题思路
看两棵树是否相同,肯定要遍历所有的节点,进行值比较,那么遍历的方法有 DFS,BFS,我用 DFS
算法,数据结构
递归,DFS
递归何时返回 true
当递归到的两个节点都是 null 或两节点值相同
过程
我直接用 isSameTree 来做迭代
判断两节点是否都为空
首先判断是否都为空,如果为空,返回 true,不用再递归
然后是一些 false 的情况:
两节点只有一个为 null,两节点值不相同
递归左树和右树
在对比完当前节点,分别对左,右两棵树做对比,通过递归完成
代码
// DFS
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function (p, q) {
if (!p && !q) {
return true
} else if (!p || !q) {
return false
} else if (p.val !== q.val) {
return false
}
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
}