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);
        }
    };
  • 相关阅读:
    Spring IOC
    C++ 内存模型
    C++ 多态
    Java 多态
    Java 自动装箱与自动拆箱
    C++ priority_queue
    多个页面使用到一些名称类的同一个接口,借助vuex实现
    element-ui自定义表单验证
    vue项目中导出excel文件
    数组对象根据某个属性进行排序
  • 原文地址:https://www.cnblogs.com/zmj97/p/7905181.html
Copyright © 2011-2022 走看看