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);
    }
  • 相关阅读:
    python目录
    面向对象
    模块(二)
    python函数(四)
    助教工作总结
    第五次个人作业:个人总结
    Typroa编写的图片上传博客园
    msfconsole利用ms17-010和ms12-020攻击
    第四次个人作业——案例分析
    助教周报(第二轮)
  • 原文地址:https://www.cnblogs.com/vincently/p/4776192.html
Copyright © 2011-2022 走看看