引入
虽是计算机科班生,但一直对数据结构摸不到头脑。
今日做剑指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。这是很重要也很容易出错的一点!切记!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。