刷题使我快乐,满脸开心.jpg

  • 来源:力扣(LeetCode)
  • 链接:https://leetcode.cn/problems/same-tree/
  • 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目

给你两棵二叉树的根节点 pq ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

提示:

  • 两棵树上的节点数目都在范围 [0, 100]
  • -104 <= Node.val <= 104

思路

BFS、DFS均可

代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isSameTree(p *TreeNode, q *TreeNode) bool {
	if p == nil && q == nil {
		return true
	}
	if (p == nil && q != nil) || (q == nil && p != nil) {
		return false
	}
	pNodeArr := []*TreeNode{p}
	qNodeArr := []*TreeNode{q}
	for i := 0; len(pNodeArr) == len(qNodeArr) && len(pNodeArr) > 0; i++ {
		pTempNodeArr := make([]*TreeNode, 0)
		qTempNodeArr := make([]*TreeNode, 0)
		for j, _ := range pNodeArr {
			if pNodeArr[j].Val != qNodeArr[j].Val {
				return false
			}
			if pNodeArr[j].Left != nil && qNodeArr[j].Left != nil {
				pTempNodeArr = append(pTempNodeArr, pNodeArr[j].Left)
				qTempNodeArr = append(qTempNodeArr, qNodeArr[j].Left)
			} else if pNodeArr[j].Left == nil && qNodeArr[j].Left == nil {

			} else {
				return false
			}
			if pNodeArr[j].Right != nil && qNodeArr[j].Right != nil {
				pTempNodeArr = append(pTempNodeArr, pNodeArr[j].Right)
				qTempNodeArr = append(qTempNodeArr, qNodeArr[j].Right)
			} else if pNodeArr[j].Right == nil && qNodeArr[j].Right == nil {

			} else {
				return false
			}
		}
		pNodeArr = pTempNodeArr
		qNodeArr = qTempNodeArr
	}
	return true
}

func isSameTree(p *TreeNode, q *TreeNode) bool {
    if p == nil && q == nil {
        return true
    }
    if p == nil || q == nil {
        return false
    }
    if p.Val != q.Val {
        return false
    }
    return isSameTree(p.Left, q.Left) && isSameTree(p.Right, q.Right)
}