引入

虽是计算机科班生,但一直对数据结构摸不到头脑。
今日做剑指offer和LeetCode的二叉树相关题目忽然摸到些门道,故此记录

100. 相同的树

给定两个二叉树,编写一个函数来检验它们是否相同。

var isSameTree = function (p, q) {
    if (!p && !q) return true
    if (!(p && q) || p.val !== q.val) return false
    return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
};

心得体会

关于树的题目无非是两种解决方式:递归 / 非递归

而最容易想到的则是递归方式,大部分二叉树的递归问题都有模板可套:

  1. 先讨论当前节点的情况;
  2. 讨论子节点的情况;
  3. (可选)如果题目复杂可能还要考虑到孙节点的情况;
关于递归函数,我想说:
  1. return 带返回值的,通常模式如下

    function travel(root){
      if(!root) return 0
      if(root.left) return travel(root.left)+1
      if(root.right) return travel(root.right)+1
    }
  2. return 无返回值的,通常模式如下

    let arr = []
    function (root){
      if(!root) return
      arr.push(root.val)
      if(root.left) travel(root.left)
      if(root.right) travel(root.right)
    }
  • 区别:是否在函数前边加return。这是很重要也很容易出错的一点!切记!!!

Oliver
76 声望13 粉丝

Slow Done, Achieve More.