Skip to content

Latest commit

 

History

History
82 lines (64 loc) · 1.74 KB

100.相同的树.md

File metadata and controls

82 lines (64 loc) · 1.74 KB

100. 相同的树

url

题目

给定两个二叉树,编写一个函数来检验它们是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

输入:       1         1
          / \       / \
         2   3     2   3
        [1,2,3],   [1,2,3]
输出: true
输入:      1          1
          /           \
         2             2
        [1,2],     [1,null,2]
输出: false
输入:       1         1
          / \       / \
         2   1     1   2
        [1,2,1],   [1,1,2]
输出: false

方法

可递归,可遍历

相同的树,三个结束条件

  • 如果pq都不为空,则为true,毕竟相同的树,节点数量和方向都得一样吧?
  • 如果pq其中一个为空,则为false,说明节点数量或者方向不对呀?
  • 如果pq的值不相等的话,直接false

code

js

let isSameTree = (p, q) => {
    if (p === null && q === null) return true;
    if (p === null || q === null) return false;
    if (p.val !== q.val) return false;
    return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}

go

func isSameTree(p, 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)
}

java

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p == null && q == null) return true;
        if(p == null || q == null) return false;
        if(p.val != q.val) return false;
        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
}