zoukankan      html  css  js  c++  java
  • 【剑指Offer-代码的鲁棒性】面试题26:树的子结构

    问题描述

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

    思路

    首先判断A和B的根是否相同,如果不同的话,将A的左子树和右子树再与B做判断;如果相同的话,则判断子树是否相同:比较每个节点,有一个不相同则不相同。代码如下:

    /*
    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)
        {
            bool result = false;
            if(pRoot1!=nullptr && pRoot2!=nullptr)
            {
                if(pRoot1->val==pRoot2->val)
                    result = check(pRoot1, pRoot2);
                if(!result)
                    result = HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
             }
            return result;
        }
        
        bool check(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            if(pRoot2==nullptr)    //注意递归终止条件
                return true;
            if(pRoot1==nullptr)
                return false;
            if(pRoot1->val!=pRoot2->val)
                return false;
            
            return check(pRoot1->left, pRoot2->left) && check(pRoot1->right, pRoot2->right);
        }
    };
    
  • 相关阅读:
    vue零散知识
    vue router 和 组件生命周期的理解
    未搞懂的问题
    前端问题总结
    垂直居中
    css,js加载阻塞页面渲染的理解
    node 学习
    自定义事件
    学习react 遇到的问题
    [AHOI2001]彩票摇奖
  • 原文地址:https://www.cnblogs.com/flix/p/12451862.html
Copyright © 2011-2022 走看看