Tree——No.572 Subtree of Another Tree

本文介绍了一种使用递归方法来检查一棵树是否为另一棵树的子树的方法,并提供了一种优化方案,通过前序遍历来提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem:

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s.

A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.

Explanation:

判断树t是否为树s的子树。

My Thinking:

使用递归,遍历每个结点,对每个结点为根的子树与s相比较。

My Solution:

class Solution {
    public boolean isSubtree(TreeNode s, TreeNode t) {
        return traverse(s,t);
    }
    public boolean traverse(TreeNode s,TreeNode t){
        if(s==null)
            return false;
        if(isEqual(s,t))
            return true;
        return traverse(s.left,t) || traverse(s.right,t);
    }
    public boolean isEqual(TreeNode s,TreeNode t){
        if((s==null && t!=null)||(s!=null && t==null))
            return false;
        if(s==null && t==null)
            return true;
        if(s.val!=t.val)
            return false;
        return isEqual(s.left,t.left) && isEqual(s.right,t.right);
    }
}

Optimum Thinking:

使用前序遍历s和t,判断t是否是s的子集,但是需要把孩子为null也考虑进去。

Optimum Solution:

class Solution {
    public boolean isSubtree(TreeNode s, TreeNode t) {
        String ts=preOrder(s,true);
        String tt=preOrder(t,true);
        return ts.indexOf(tt)>=0;
    }
    public String preOrder(TreeNode t,boolean left){
         if (t == null) {
            if (left)
                return "lnull";
            else
                return "rnull";
        }
        return "#"+t.val + " " +preOrder(t.left, true)+" " +preOrder(t.right, false);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值