zoukankan      html  css  js  c++  java
  • day18(树的子结构)

    题目描述

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
     
     
    提交链接:点击
     
     
    思路:判断是否子树,首先在A中递归遍历找到和B树根节点相同的节点R,然后对以R节点为根节点开始的子树和B子树进行“是否完全一样”的比较。这里也利用递归遍历,首先进行判断t2,然后进行根节点判断,看是否一样,如果一样,则递归进行左右子树判断。
     
     
    代码:
    /*
    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)
        {
            //先在A中找到和B根节点一样的节点,然后分别判断B中根节点左子树、右子树是否是A中一样
            bool flag=false;
            if(pRoot2==NULL || pRoot1==NULL) return false;
            if(pRoot1->val == pRoot2->val) 
                flag=isSubtree(pRoot1,pRoot2);
            if(!flag){
                flag=HasSubtree(pRoot1->left,pRoot2);
            }
            if(!flag){
                flag=HasSubtree(pRoot1->right,pRoot2);
            }
            return flag;
            //return isSubtree(pRoot1,pRoot2)||isSubtree(pRoot1->left,pRoot2)||isSubtree(pRoot1->right,pRoot2);
        }
        bool isSubtree(TreeNode* t1,TreeNode* t2){
            if(t2==NULL) return true; //t2遍历完了,返回true
            if(t1==NULL) return false; //t1遍历完,t2还没有遍历完,返回false
            if(t1->val==t2->val) 
                return isSubtree(t1->left,t2->left) && isSubtree(t1->right,t2->right);
            else 
                return false;
        }
    };

    非学无以广才,非志无以成学! 【Magic_chao

  • 相关阅读:
    理解java的三大特性之封装
    Spring_事务-注解代码
    Spring_使用 NamedParameterJdbcTemplate
    C#多线程简单例子讲解
    C#多线程编程
    ASP.NET MVC 的URL路由介绍
    NHibernate二级缓存(第十一篇)
    NHibernate之配置文件属性说明
    NHibernate之映射文件配置说明
    NHibernate 延迟加载与立即加载 (第七篇)
  • 原文地址:https://www.cnblogs.com/logo-88/p/9736044.html
Copyright © 2011-2022 走看看