zoukankan      html  css  js  c++  java
  • (剑指Offer)面试题18:树的子结构

    题目:

    输入两棵二叉树A和B,判断B是不是A的子结构。

    二叉树结构定义如下:

    struct TreeNode{
        int val;
        TreeNode* left;
        TreeNode* right;
    };
    

    思路:

    判断二叉树B是否为二叉树A的子树:

    首先判断二叉树A的根节点值是否等于二叉树B的根节点值;

    如果是,则继续往下遍历,判断二叉树A的左子节点和二叉树B的左子结点以及二叉树A的右子节点和二叉树B的右子节点是否都相等,直到叶子节点;(递归)

    return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);

    如果不是,则判断二叉树B是否为二叉树A左子树的子树或者二叉树B是否为二叉树A右子树的子树;(递归)

    result=HasSubtree(pRoot1->left,pRoot2);
    result=HasSubtree(pRoot1->right,pRoot2);

    代码:

    struct TreeNode{
        int val;
        TreeNode* left;
        TreeNode* right;
    };
    
    bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){
        if(pRoot2==NULL)
            return true;
        if(pRoot1==NULL)
            return false;
        if(pRoot1->val!=pRoot2->val)
            return false;
        return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);
    }
    
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
        bool result=false;
        if(pRoot1!=NULL && pRoot2!=NULL){
            if(pRoot1->val==pRoot2->val)
                result=IsSubtree(pRoot1,pRoot2);
            if(!result)
                result=HasSubtree(pRoot1->left,pRoot2);
            if(!result)
                result=HasSubtree(pRoot1->right,pRoot2);
        }
        return result;
    }

    在线测试OJ:

    http://www.nowcoder.com/books/coding-interviews/6e196c44c7004d15b1610b9afca8bd88?rp=1

    AC代码:

    class Solution {
    public:
        bool IsSubtree(TreeNode* pRoot1,TreeNode* pRoot2){
            if(pRoot2==NULL)
                return true;
            if(pRoot1==NULL)
                return false;
            if(pRoot1->val!=pRoot2->val)
                return false;
            return IsSubtree(pRoot1->left,pRoot2->left) && IsSubtree(pRoot1->right,pRoot2->right);
        }
    
        bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            bool result=false;
            if(pRoot1!=NULL && pRoot2!=NULL){
                if(pRoot1->val==pRoot2->val)
                    result=IsSubtree(pRoot1,pRoot2);
                if(!result)
         			result=HasSubtree(pRoot1->left,pRoot2);
                if(!result)
                    result=HasSubtree(pRoot1->right,pRoot2);
            }
            return result;
        }
    };
    

      

  • 相关阅读:
    在上传图片前,提供预览功能(Javascript)
    C#和Visual Basic渐行渐远
    Silverlight入门介绍和应用实践
    一道面试试题:试介绍ASP.NET页面之间数据传递的几种方法
    建立基于AJAX样式的文件上传
    CSS 命名规范
    Microsoft出招,Adobe接招,我们只好择优使用
    最近要使用User Interface Process Application Block for .NET(微软net开发架构)
    利用office web component打造精品图表(一)
    滚动条SCROLLBAR
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4649017.html
Copyright © 2011-2022 走看看