zoukankan      html  css  js  c++  java
  • 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;
    };

     

  • 相关阅读:
    查询多列数据时用这种方法查询
    当只需要查找一列数据的时候 用这种方法减少数据库的访问
    将从数据表中获得的枚举变量名称或者是控件名变成要使用的枚举变量
    枚举变量用法
    查询数据表行数 然后循环查找表 添加数据到ITEMS
    tbType和TypeList操作
    c#中动态创建textbox并且从数据库中获取表中数据添加到textbox中
    OpenCV
    lambda表达式
    技术术语
  • 原文地址:https://www.cnblogs.com/wltree/p/15661815.html
Copyright © 2011-2022 走看看