zoukankan      html  css  js  c++  java
  • 【算法题目】树的子结构

      题目来源:《剑指offer》面试题18

      输入两颗二叉树A和B,判断B是不是A的子结构。二叉树的节点定义如下:

    struct BinaryTreeNode {
        int    value;
        BinaryTreeNode*    left;
        BinaryTreeNode*    right;
    };

      要查找A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和B的根节点的值一样的节点R,然后再判断树A中以R为根节点的子树是不是包含和树B一样的结构。

      

    bool HasSubTree(BinaryTreeNode* root1, BinaryTreeNode* root2) {
        if (root1 == NULL) return false;
    
        bool flag = false;
    
        if (root1->value == root2->value)
            flag = DoesTree1HasTree2(root1, root2);
    
        if (!flag)
            flag = HasSubTree(root1->left, root2);
    
        if (!flag)
            flag = HasSubTree(root1->left, root2);
    
        return flag;
    }
    
    bool DoesTree1HasTree2(BinaryTreeNode* root1, BinaryTreeNode* root2) {
        if (root2 == NULL)
            return true;
    
        if (root1 == NULL)
            return false;
    
        if (root1->val != root2->val)
            return false;
    
        return DoesTree1HasTree2(root1->left, root2) && DoesTree1HasTree2(root1->right, root2);
    }
  • 相关阅读:
    CGCDSSQ
    100200H
    斗地主
    借教室
    bzoj 3743
    17B
    能量项链
    589
    16-求连续数组和最大
    15-幸运数组4、7
  • 原文地址:https://www.cnblogs.com/vincently/p/4776192.html
Copyright © 2011-2022 走看看