乐趣区

关于算法:算法-二叉树刷题有感

引入

虽是计算机科班生,但始终对数据结构摸不到头脑。
今日做剑指 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。这是很重要也很容易出错的一点!切记!!!
退出移动版