首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一棵树的值与另一棵树相匹配。

一棵树的值与另一棵树相匹配。
EN

Stack Overflow用户
提问于 2014-03-31 02:54:45
回答 1查看 45关注 0票数 0

我正在解决一些关于树木的问题,为科技面试做准备。我偶然发现了一个问题,看看一个树(子集)的值是否与另一个树(主树)的值相匹配。

为例

代码语言:javascript
复制
          3     is part of                4  
         / \    ----------->             / \
        7   9                           3   7
                                           / \
                                          8   9

我想出了下面的解决方案。

代码语言:javascript
复制
public static boolean isSubset(TreeNode<String> subNode, TreeNode<String> mainNode){
    if(subNode == null)     
        return true;

    if(mainNode == null)
        return false;

    if(subNode.data.equals(mainNode.data)){
        return (isSubset(subNode.left,mainNode) && isSubset(subNode.right,mainNode));
    }else{
        return (isSubset(subNode,mainNode.left) || isSubset(subNode,mainNode.right)); 
    }
}

但是,此解决方案只检查节点是否与mainTree中的节点顺序相同(根、左和右)。我应该在上面的代码中更改什么,这样我就可以用主树的每个节点来检查我的子树中的每个节点是否匹配?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 03:00:55

如果我理解您的需求,您根本不关心树结构;您只需要测试植根于subNode的树的每个元素是否存在于植根于mainNode的树中。我建议您开发一个谓词(让我们称之为contains)来测试单个值是否在树中。然后你可以在此基础上:

代码语言:javascript
复制
public static boolean isSubset(TreeNode<String> subNode, TreeNode<String> mainNode){
    if(subNode == null)     
        return true;

    if(mainNode == null)
        return false;

    return mainNode.contains(subNode.data)
        && isSubset(subNode.left, mainNode)
        && isSubset(subNode.right, mainNode);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22752909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档