美文网首页
面试题26: 树的子树

面试题26: 树的子树

作者: mark_x | 来源:发表于2019-10-17 17:08 被阅读0次

剑指offer中原题是"树的子结构", 也就是只要子树B是树A的一部分就可以;
我实际做的这道题是leetcode上的, 他的要求是"树的子树", 也就是说要求子树B的树A严格意义上的子树, 区别很容易理解, 如下:


image.png

如果是"子结构",则判定为true
如果是"子树"的要求, 则判定为false
两段代码的区别已经放到了下面, 具体就是结束条件的不同
子结构:
树B为null, 说明树B已经匹配完毕, 返回true
树A为null, 说明前面的判断为树B非null, 也就是树B还没有匹配完, 树A就结束了, 返回false
两者都不为null 则判断是否相等, 不等返回false

只有以上全部通过, 才继续递归判断下一节点



/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

/**
遍历节点 如果s树的某个节点与t树的根节点匹配 则进入第二步

如果没有匹配 或者根节点匹配成功后, 子树匹配失败 继续遍历

*/


class Solution {
    public boolean isSubtree(TreeNode s, TreeNode t) {
        
        boolean result = false;
        if(s != null && t != null){
            if(s.val == t.val){
                result = isSubtreeCore(s, t);
            }
            if(result == false){ 
                //只有首节点匹配 且子树也匹配才会有result=true 其他情况都要继续遍历
                result = isSubtree(s.left, t);
            }
            if(result == false){
                result = isSubtree(s.right, t);
            }
        }
        return result;
    }
    
    
    public boolean isSubtreeCore(TreeNode s, TreeNode t){
        if(s == null && t == null) return true;
        //排除了都是null 只可能是一个为null 一个不为null
        if(s == null || t == null) return false;
        
        if(s.val != t.val) return false;
        
        //如果都有值且相等, 继续往下比较 判断
        return isSubtreeCore(s.left, t.left) && isSubtreeCore(s.right, t.right);
    }
}

相关文章

  • 面试题26: 树的子树

    剑指offer中原题是"树的子结构", 也就是只要子树B是树A的一部分就可以;我实际做的这道题是leetcode上...

  • LeetCode | 面试题26. 树的子结构【Python】

    LeetCode 面试题26. 树的子结构【Medium】【Python】【DFS】 问题 力扣 输入两棵二叉树A...

  • 树、二叉树

    树的概念 节点、根节点、父节点、子节点、兄弟节点 、子树、左子树、右子树、空树 节点的度(degree):子树的个...

  • 树--(二叉树、B树、B+树)

    二叉树 二分法形成的树右子树大于左子树,长于左子树平衡二叉树:右子树比左子树高度差不超过1 算法效率 O(logN...

  • 数据结构与算法(二叉树)

    二叉树 二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。 二叉树的...

  • 刷题No8 二叉树基本概念

    二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(ri...

  • 数据结构与算法

    平衡二叉树 一棵AVL树满足以下的条件:1.它的左子树和右子树都是AVL树2.左子树和右子树的高度差不能超过1 哈...

  • 红黑树

    1.二叉树二叉树指的是每个节点最多只能有两个字数的有序树。通常左边的子树称为左子树 ,右边的子树称为右子树 2.排...

  • 二叉树

    二叉树 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(...

  • iOS菜逼学算法(三)二叉树

    二叉树,懵逼!原理大概说下 左子树,节点小于子树节点 右子树,节点大于子树节点 创建二叉搜索树

网友评论

      本文标题:面试题26: 树的子树

      本文链接:https://www.haomeiwen.com/subject/khkvmctx.html