zoukankan      html  css  js  c++  java
  • LeetCode100 相同的树

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

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

    示例 1:

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

    示例 2:

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

    示例 3:

    输入:       1         1
              /        / 
             2   1     1   2
    
            [1,2,1],   [1,1,2]
    
    输出: false




    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    /*
    算法思想:
        采用递归,递归比较两棵树即可。
    */
    class Solution {
    public:
        bool isSameTree(TreeNode* p, TreeNode* q) {
            if(!p && !q)
                return true;
            if((!p&&q)||(p&&!q)||(p->val!=q->val))
                return false;
            return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
        }
    };
    /*
    算法思想:
        采用迭代,利用栈保存结点然后比较结点即可。
    */
    class Solution {
    public:
        bool isSameTree(TreeNode* p, TreeNode* q) {
            stack<TreeNode*> s1, s2;
            if (p)  s1.push(p);
            if (q)  s2.push(q);
            while (!s1.empty() && !s2.empty()) {
                TreeNode *t1 = s1.top(); s1.pop();  //这是关键,先取在弹栈
                TreeNode *t2 = s2.top(); s2.pop();
                if (t1->val != t2->val) 
                    return false;
                
                if (t1->left) s1.push(t1->left);
                if (t2->left) s2.push(t2->left);
                if (s1.size() != s2.size()) 
                    return false;
                
                if (t1->right) s1.push(t1->right);
                if (t2->right) s2.push(t2->right);
                if (s1.size() != s2.size()) 
                    return false;
            }
            return s1.size() == s2.size();
        }
    };
  • 相关阅读:
    PCM简介
    微波炉炖蛋
    python的命令行参数处理
    耳机标准
    SELinux杂谈
    Linux ssh服务器配置
    Centos 7安装nginx
    WPF TextBox属性IsReadOnlyCaretVisible
    [WPF打印]WPF 文档元素(Run TextBlock Paragraph)的文字对齐方式
    [SQLite3]connection string的连接池参数引发的错误
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10090427.html
Copyright © 2011-2022 走看看