引入

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