zoukankan      html  css  js  c++  java
  • 剑指Offer-17.树的子结构(C++/Java)

    题目:

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

    分析:

    注意这道题是判断B是不是A的子结构,而不是子树,这一点要注意下,且空树不是任意一个树的子结构。

    判断的时候我们要从A树的根节点开始判断B是不是A的结构,递归依次判断B是不是A的左子树和右子树的子结构。

    在子结构的判断上,也就是从两个根节点开始判断是否相同,然后递归判断左右节点的val是否相同,当出现B中节点为null的时候,返回true。A中节点为null时,返回false,节点不相同也返回false,多个结果取与。

    程序:

    C++

    class Solution {
    public:
        bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            bool res = false;
            if(pRoot1 != nullptr && pRoot2 != nullptr){
                res = helper(pRoot1, pRoot2);
                if(!res)
                    res = HasSubtree(pRoot1->left, pRoot2);
                if(!res)
                    res = HasSubtree(pRoot1->right, pRoot2);
            }
            return res;
        }
        bool helper(TreeNode* p1, TreeNode* p2){
            if(p2 == nullptr)
                return true;
            else if(p1 == nullptr)
                return false;
            else if(p1->val != p2->val)
                return false;
            else
                return helper(p1->left, p2->left) && helper(p1->right, p2->right);
        }
    };

    Java

    public class Solution {
        public boolean HasSubtree(TreeNode root1,TreeNode root2) {
            if(root1 == null || root2 == null)
                return false;
            /*boolean result = false;
            result = helper(root1, root2);
            if(!result)
                result = HasSubtree(root1.left, root2);
            if(!result)
                result = HasSubtree(root1.right, root2);
            return result;*/
            return helper(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
        }
        public boolean helper(TreeNode root1,TreeNode root2){
            if(root2 == null)
                return true;
            if(root1 == null)
                return false;
            if(root1.val != root2.val)
                return false;
            return helper(root1.left, root2.left) && helper(root1.right, root2.right);
        }
    }
  • 相关阅读:
    C# 异步(上)
    依赖注入框架Ninject
    依赖注入实例
    职场闲言
    Excel 使用VBA或宏----简单笔记
    Excel单元格锁定及解锁
    current transaction is aborted, commands ignored until end of transaction block
    JAVA_HOME is not defined correctly
    Multiple encodings set for module chunk explatform "GBK" will be used by compiler
    springBoot 整合 RabbitMQ 的坑
  • 原文地址:https://www.cnblogs.com/silentteller/p/11910955.html
Copyright © 2011-2022 走看看