题目地址(100. 相同的树)
https://leetcode-cn.com/problems/same-tree/
题目描述
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 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
前置知识
- 深度优先遍历
- 二叉树
思路1 (递归 + DFS)
先判断特殊情况:二者均为空,或其中一个为空
深度优先遍历,递归判断左子树和右子树是否相等
代码1
- 语言支持:JavaScript
JavaScript Code:
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
if (p == null && q == null) {
return true;
} else if ((p !== null && q == null) || (p == null && q !== null)) {
return false;
}
if (p.val !== q.val) {
return false;
} else {
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
};
复杂度分析1
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( l o g n ) O(logn) O(logn)
思路2 (前序遍历 + 中序遍历)
利用两种遍历可以确定一棵树,使用前序遍历和中序遍历
代码2
- 语言支持:JavaScript
JavaScript Code:
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
const preorderP = preorder(p, []);
const preorderQ = preorder(q, []);
const inorderP = inorder(p, []);
const inorderQ = inorder(q, []);
return (preorderP.join("") === preorderQ.join("")) && (inorderP.join("") === inorderQ.join(""));
};
function preorder(root, res) {
if (root == null) {
res.push(" ");
return res;
}
res.push(root.val);
preorder(root.left, res);
preorder(root.right, res);
return res;
}
function inorder(root, res) {
if (root == null) {
res.push(" ");
return res;
}
inorder(root.left, res);
res.push(root.val);
inorder(root.right, res);
return res;
}
复杂度分析2
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)