给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
输入:
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
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
//中序
var isSameTree = function(p, q) {
if(!q) {
return !p;
}
if(!p) {
return false;
}
return p.val === q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
};
执行用时 : 76ms, 在所有 JavaScript 提交中击败了70.75%的用户
内存消耗 : 33.8MB, 在所有 JavaScript 提交中击败了20.07%的用户
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
//前序
var isSameTree = function(p, q) {
if(!q) {
return !p;
}
if(!p) {
return false;
}
return isSameTree(p.left, q.left) && p.val === q.val && isSameTree(p.right, q.right) ;
};
执行用时 : 60ms, 在所有 JavaScript 提交中击败了99.18的用户
内存消耗 : 33.7MB, 在所有 JavaScript 提交中击败了32.20%的用户
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
//后序
var isSameTree = function(p, q) {
if(!q) {
return !p;
}
if(!p) {
return false;
}
return isSameTree(p.left, q.left) && p.val === q.val && isSameTree(p.right, q.right) ;
};
执行用时 : 72ms, 在所有 JavaScript 提交中击败了97.73的用户
内存消耗 : 33.7MB, 在所有 JavaScript 提交中击败了22.35%的用户
使用的树的 前序 中序 后序遍历比较,实际算法的效率和内层消耗应该和树的结构有关