100. 相同的树

100. 相同的树

题目链接: 100. 相同的树(简单)

给你两棵二叉树的根节点 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

题解

思路:101. 对称二叉树 其实就是比较两颗树,也就是根节点的左子树和右子树。并且该题是判断左子树和右子树是否对称,所以对左子树的遍历顺序是左右中,右子树的遍历顺序是右左中,只需将需要比较的节点同时存入一个容器,并同时取出来进行对比即可。而此题与101. 对称二叉树 类似,只需统一两棵树的遍历顺序即可。

方法一:递归

代码(C++):

//递归法
class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if (p != nullptr && q == nullptr) return false;
        else if (p == nullptr && q != nullptr) return false;
        else if (p == nullptr && q == nullptr) return true;
        else if (p->val != q->val) return false;
​
        bool left = isSameTree(p->left, q->left); // 1号树:左、 2号树:左
        bool right = isSameTree(p->right, q->right); // 1号树:右、 2号树:右
        return left && right; // 1号树:中、 2号树:中 (逻辑处理)
    }
};

代码(JavaScript):

//递归
var isSameTree = function(p, q) {
    if (p === null && q === null) return true;
    else if (p === null || q === null) return false;
    else if (p.val != q.val) return false;
​
    var result1 = isSameTree(p.left, q.left);
    var result2 = isSameTree(p.right, q.right);
    return result1 && result2;
​
};

方法一:迭代

代码(C++):

//迭代法
class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        queue<TreeNode*> que;
        que.push(p);
        que.push(q);
        while (!que.empty()) {
            TreeNode* pNode = que.front();
            que.pop();
            TreeNode* qNode = que.front();
            que.pop();
​
            if (pNode == nullptr && qNode == nullptr);
            else if (pNode == nullptr || qNode == nullptr) return false;
            else if (pNode->val != qNode->val) return false;
            else {
                que.push(pNode->left);
                que.push(qNode->left);
                que.push(pNode->right);
                que.push(qNode->right);
            }
        }
        return true;
    }
};

代码(JavaScript):

//迭代
var isSameTree = function(p, q) {
    let que = [];
    que.push(p);
    que.push(q);
    while (que.length != 0) {
        var node1 = que.shift();
        var node2 = que.shift();
        if (node1 === null && node2 === null);
        else if (node1 === null || node2 === null) return false;
        else if (node1.val != node2.val) return false;
        else {
            que.push(node1.left);
            que.push(node2.left);
            que.push(node1.right);
            que.push(node2.right);
        }
    }
    return true;
};

 

 

posted @ 2021-12-08 15:35  wltree  阅读(38)  评论(0编辑  收藏  举报