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

  • 相关阅读:
    判断浏览器是pc端和移动
    高德谷歌地图切换成英文地图
    小程序修改默认的单选框复选框样式
    推荐系统| ① Movies概述
    推荐系统| ② 离线推荐&基于隐语义模型的协同过滤推荐
    数据结构与算法| 复杂度分析
    Flink| 运行架构
    机器学习| 高数-基础
    Flink| 概述| 配置安装
    推荐系统| 概述
  • 原文地址:https://www.cnblogs.com/logo-88/p/9736044.html
Copyright © 2011-2022 走看看