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);
        }
    };
  • 相关阅读:
    JSMpeg的使用
    Python模拟键盘输入
    Python处理文件打开窗口
    Airtest网页自动化批量执行脚本
    使用AirTest进行网页自动化测试
    iOS14适配
    Vue ref refs
    uni-app 离线打包后提示 打包时未添加Native UI、File模块
    uni-app 自定义弹窗组件、slot插槽
    Taro react事件传参 路由传参
  • 原文地址:https://www.cnblogs.com/zmj97/p/7905181.html
Copyright © 2011-2022 走看看