leetcode:100. 相同的树

题目来源

100. 相同的树

题目描述

在这里插入图片描述

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {

    }
};

题目解析

递归(对称性递归)

先序遍历的递归形式

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p == NULL && q == NULL){
            return true;
        }
        
        if(p == NULL || q == NULL){
            return false;
        }
        
        if(q->val != p->val){
            return false;
        }

        return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
    }
};

在这里插入图片描述

树形DP(待续)

两棵树如果相同,那么:

  • 它们的左子树相同
  • 它们的右子树相同
  • 当前树相同

队列–层次遍历

public boolean isSameTree(TreeNode p, TreeNode q) {
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.offer(p);
        queue.offer(q);

        while (!queue.isEmpty()){
            TreeNode p1 = queue.pop();
            TreeNode p2 = queue.pop();
            if (p1 == null && p2 == null){
                continue;  //易错点 [12 null 69] [12 null 11]
            }

            if (p1 == null || p2 == null){
                return false;
            }

            if (p1.val != p2.val){
                return false;
            }

            queue.offer(p1.left);
            queue.offer(p2.left);
            queue.offer(p1.right);
            queue.offer(p2.right);
        }

        return true;
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值