zoukankan      html  css  js  c++  java
  • 二叉树是否相同(递归版)

    题目:

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

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

    示例 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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/same-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    分析:

    看到这个题目我的第一反应还是递归,没办法,最近爱上了递归,陷入了无限真香循环,无法自拔。

    我的思路是首先比较两个二叉树顶层节点,如果两个二叉树都为null,那么不用继续比较下去了,直接返回true。如果两个二叉树都不为null,那么对比一下二者的节点值,如果值相同,则不用理它们,如果不同的话,同样不用继续进行比较了,直接返回false。最后的最后,如果没有满足上面提到的三个return中任何一个的执行条件,那么将两个节点的左右子节点传入递归方法进行下一轮的对比。

    最终,如果有任意两个位置的节点不同,则最终结果一定为false(详见代码)。

    题解:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isSameTree(TreeNode p, TreeNode q) {
            return check(p, q);
        }
    
        public boolean check(TreeNode p, TreeNode q) {
            if (p == null && q == null) {
                return true;
            }
            if (p != null && q != null) {
                if (p.val != q.val) {
                    return false;
                }
            } else {
                return false;
            }
            return check(p.left, q.left) && check(p.right, q.right);
        }
    }
  • 相关阅读:
    梯度下降
    02CSS
    逻辑推理题
    TensorFlow安装
    Python线程学习
    tensorflow中张量_常量_变量_占位符
    01HTML
    HDOJ 1078 FatMouse and Cheese
    HDOJ 2830 Matrix Swapping II
    HDOJ 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13277993.html
Copyright © 2011-2022 走看看