zoukankan      html  css  js  c++  java
  • [剑指offer] 树的子结构

    题目描述

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    建立一个函数isSubtreeWithSameRoot(TreeNode* pRoot1, TreeNode* pRoot2)判断第二个是不是第一个的子结构且是从根节点开始匹配相同的。

    然后在HasSubtree中前序遍历判断是否isSubtreeWithSameRoot。

    需要注意的是,子结构不需要是某个“叶结构”,只要是树的一个部分就是它的子结构。

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            if (!pRoot1 || !pRoot2) return false;
            if (isSubtreeWithSameRoot(pRoot1, pRoot2)) return true;
            if (HasSubtree(pRoot1->left, pRoot2)) return true;
            if (HasSubtree(pRoot1->right, pRoot2)) return true;
            return false;
        }
        bool isSubtreeWithSameRoot(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            if (!pRoot1 && pRoot2) return false;
            if (!pRoot2) return true;
            if (pRoot1->val != pRoot2->val) return false;
            return isSubtreeWithSameRoot(pRoot1->left, pRoot2->left)
                && isSubtreeWithSameRoot(pRoot1->right, pRoot2->right);
        }
    };
  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/zmj97/p/7905181.html
Copyright © 2011-2022 走看看