算法探索_相同的树

问题描述:

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

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

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

解决思路:

方案就一个字:“两树同时递归遍历比较”

    /*
     *作者:赵星海
     *时间:2020/8/31 16:05
     *用途:相同的树
     */
    boolean isOK = true;
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null) return isOK;
        if (p == null || q == null) {
            isOK = false;
            return false;
        }
        //深海看我题目脑子浮现出一个字:"递归";
        if (p.val != q.val) {
            isOK = false;
            return false;
        }
        //左边叶子递归
        if (p.left != null) {
            //q没有对应叶子,直接说明不相同
            if (q.left == null) {
                isOK = false;
                return false;
            }
            isSameTree(p.left, q.left);
        } else {
            if (q.left != null) {
                isOK = false;
                return false;
            }
        }
        //右边叶子递归
        if (p.right != null) {
            //q没有对应叶子,直接说明不相同
            if (q.right == null) {
                isOK = false;
                return false;
            }
            isSameTree(p.right, q.right);
        } else {
            if (q.right != null) {
                isOK = false;
                return false;
            }
        }
        return isOK;
    }

leetCode提交结果:

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/108325876