又是周末,一月的深圳,有点微冷。冬日的太阳,懒洋洋,在阳台上睡了一个小时,帽子遮着脸,被老婆偷拍了一张
去年十月份起,自己的工作内容发生了一些变化,写代码的时间减少了。新的工作内容,对自己是一个不小的挑战,用上级的话来说:目前还显稚嫩,需要多多提高。诚哉斯言。
太阳虽然晒得舒服,但还是得做点正事。于是,找点leetcode题目来玩玩,一方面是保持编程的思路,找找代码的感觉;另一方面也是保持公众号的连续性,持续为读者提供价值。
今天,我们来看一道笔试面试题目: 判断两棵二叉树是否相同。
针对树的问题,一般都可以用递归的方法搞定。p树和q树是相同二叉树的充要条件是:
-
p.Val == q.Val
-
p.left和q.left是相同的树
-
p.right和q.right是相同的树
那么,我们怎么着手去写代码呢?显然,p.Val和q.Val存在的前提条件是p和q非空,所以,要提前对p和q的非空情况做判断:
q == nil | q != nil | |
p == nil | 相同树 | 不同树 |
p != nil | 不同树 | 递归 |
直接看代码(经验证代码正确):
func isSameTree(p *TreeNode, q *TreeNode) bool {
if p == nil && q == nil {
return true
}
if p == nil && q != nil {
return false
}
if p != nil && q == nil {
return false
}
if p.Val == q.Val && isSameTree(p.Left, q.Left) && isSameTree(p.Right, q.Right) {
return true
}
return false
}
这篇文章,思路和代码都不难,故不过多赘述。未来,我们会继续讲解leetcode和其他笔试面试题目。也祝愿找工作的朋友,一切顺利,拿到money多多的offer.