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

  • 相关阅读:
    vue-router的push和replace的区别
    ajax请求常见状态码以及产生的原因
    vue定义data的三种方式与区别
    button与input button区别
    变量的声明方式
    js变量
    JavaScript的节流与防抖?
    js实现继承的方法-构造函数
    前端表单验证常用的15个JS正则表达式
    ES6中的新增数组的方法
  • 原文地址:https://www.cnblogs.com/logo-88/p/9736044.html
Copyright © 2011-2022 走看看