zoukankan      html  css  js  c++  java
  • [LeetCode] 100. Same Tree Java

    题目:

    Given two binary trees, write a function to check if they are equal or not.

    Two binary trees are considered equal if they are structurally identical and the nodes have the same value.、

    题意及分析:给出两棵树,判断两棵树是否完全相同,结构和值都相同。有两种方法,一种是遍历树,对每次的节点做判断,比较复杂;另一种是使用递归,每次对左右子树进行判断。

    第一种方法:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isSameTree(TreeNode p, TreeNode q) {
            if((p==null&&q!=null)||(p!=null&&q==null)) return false;
            if(p==null&&q==null) return true;
            Stack<TreeNode> pStack = new Stack<>();
            Stack<TreeNode> qStack = new Stack<>();
            TreeNode pNode = p;
            TreeNode qNode = q;
            pStack.add(pNode);
            qStack.add(qNode);
            while(pNode.left!=null||!pStack.empty()){       //对q做和p一样的操作,如果得到的值不一样那么就返回false
                if(pNode.left!=null){
                    if(qNode.left!=null){
                        qNode = qNode.left;
                        qStack.add(qNode);
                    }else{
                        return false;   //结构不相等返回false
                    }
                    pNode = pNode.left;
                    pStack.add(pNode);
                }else{
                    if(qNode.left!=null) return  false;     //如果p屋左子节点而q还有 那么返回false
                    if(qStack.isEmpty()) return false;     //结构不相等返回false
                    TreeNode pNow = pStack.pop();
                    TreeNode qNow = qStack.pop();
                    if(pNow.val!=qNow.val) return false;        //不相等 直接返回false
                    if(pNow.right!=null){
                        if(qNow.right==null) return false;
                        pNode=pNow.right;
                        qNode=qNow.right;
                        pStack.add(pNode);
                        qStack.add(qNode);
                    }else{      //pNode没有右节点,但是q有,fanhui false
                        if(qNow.right!=null) return false;
                    }
    
                }
            }
            return true;
        }
    }
    

    第二种方法:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isSameTree(TreeNode p, TreeNode q) {
            if((p==null&&q!=null)||(p!=null&&q==null)) return false;
            if(p==null&&q==null) return true;
            if(p.val == q.val)
                return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
            return false;
        }
    }
    

      

  • 相关阅读:
    Oracle的导入导出
    Android利用数据库传送数据
    Android相对布局实例
    git拉取github项目
    kafka支持认证SASL_PLAINTEXT
    fluentd插件开发
    解决go依赖包安装问题
    ES/Kibana支持search-guard认证
    logkit docker运行和代码下载
    CentOS安装指定git版本
  • 原文地址:https://www.cnblogs.com/271934Liao/p/7172253.html
Copyright © 2011-2022 走看看