100.相同的树

119 阅读1分钟

题目描述

leetcode-cn.com/problems/sa…

分析

/**
 * 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,pq

解题思路

看两棵树是否相同,肯定要遍历所有的节点,进行值比较,那么遍历的方法有 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)
}