zoukankan      html  css  js  c++  java
  • 剑指offer JZ-17

    题目描述

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

    输入

    复制
    {8,8,#,9,#,2,#,5},{8,9,#,2}

    返回值

    复制
    true

    思路:

    判断树的结构,很明显需要递归。

    若p2是p1的子树,则应该同时满足以下条件:

      1.p2->left是p1->left的子树

      2.p2->right是p1->right的子树

      3.p1->val == p2->val;

    /*
    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;
            return Check(pRoot1,pRoot2) || Check(pRoot1->left, pRoot2) 
                || Check(pRoot1->right, pRoot2);
        }
        
        bool Check(TreeNode* p1, TreeNode* p2)
        {
            if(p2 && !p1) return false;
            if(!p2) return true;
            if(p1->val != p2->val) return false;
            return Check(p1->left, p2->left) && Check(p1->right,p2->right);
        }
    };
    View Code
  • 相关阅读:
    tensorflow 学习
    join-semi and join-anti
    深入拆解Tomcat_Jetty 笔记
    Set化
    DDD实战-笔记
    高并发系统设计-笔记
    技术管理
    性能调优-笔记
    程序员是如何思考的-笔记
    LeetCode
  • 原文地址:https://www.cnblogs.com/alan-W/p/14248821.html
Copyright © 2011-2022 走看看