sameTree用深度优先搜索判断两棵树是否相同 #算法#

25 篇文章 1 订阅

Given two binary trees, write a function to check if they are the same or not.
给定两个二叉树,写一个函数检查它们是否相同。
Two binary trees are considered the same if they are structurally identical and the nodes have the same value.
若两个二叉树的结构相同且节点有相同值,则它们相同。

·Example 1:

Input:     1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

Output: true

·Example 2:

Input:     1         1
          /           \
         2             2

        [1,2],     [1,null,2]

Output: false

·Example 3:

Input:     1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

Output: false

思路

只需要一个前序遍历(深度优先),每次判断分三种情况:
(1)if (p != NULL && q != NULL) 两个根节点都不为空,则判断值是否相等,若值相等,则判断其左右子树是否都相等;
(2)else if (p != NULL || q != NULL) 两个根节点只有一个不为空,则肯定不相等,return false;
(3)else 两个根节点都为空,则相等。
判断子树是否相等可以用递归的方法进行。

代码

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p != NULL && q != NULL){
            if(p->val != q -> val) return false;
            return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
        }
        else if(p != NULL || q != NULL) return false;
        return true;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值