• 剑指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#] 等待启动的进程执行完毕
    C# 、winform 添加皮肤后(IrisSkin2) label设置的颜色 无法显示
    Mysql 备份
    Mysql 慢查询日志配置
    Mysql 忘记密码处理配置
    PHP-FPM 慢执行日志、网站隔离配置
    PHP-FPM 设置多pool、配置文件重写
    Nginx 代理配置
    Nginx 301与302配置
    Nginx URL跳转
  • 原文地址:https://www.cnblogs.com/silentteller/p/11910955.html
Copyright © 2020-2023  润新知