引入
虽是计算机科班生,但始终对数据结构摸不到头脑。
今日做剑指 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)
};
心得体会
对于树的题目无非是两种解决形式:递归 / 非递归。
而最容易想到的则是递归形式,大部分二叉树的递归问题都有模板可套:
- 先探讨以后节点的状况;
- 探讨子节点的状况;
- (可选)如果题目简单可能还要思考到孙节点的状况;
对于递归函数,我想说:
-
return 带返回值的,通常模式如下
function travel(root){if(!root) return 0 if(root.left) return travel(root.left)+1 if(root.right) return travel(root.right)+1 }
-
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。这是很重要也很容易出错的一点!切记!!!