zoukankan      html  css  js  c++  java
  • 面试题18:树的子结构

    题目描述

    输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:

    题目分析

    剑指Offer(纪念版)P117

    代码实现

    第一步,在树A中查找与根结点的值一样的结点,这实际上就是树的遍历。先序遍历:

    bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
    {
        bool result = false;
    
        if(pRoot1 != NULL && pRoot2 != NULL)
        {
            if(pRoot1->m_nValue == pRoot2->m_nValue)
                result = DoesTree1HaveTree2(pRoot1, pRoot2);
            if(!result)
                result = HasSubtree(pRoot1->m_pLeft, pRoot2);
            if(!result)
                result = HasSubtree(pRoot1->m_pRight, pRoot2);
        }
    
        return result;
    }

    第二步,判断树A中以R为根节点的子树是不是和树B具有相同的结构。

    bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
    {
        if(pRoot2 == NULL)
            return true;
    
        if(pRoot1 == NULL)
            return false;
    
        if(pRoot1->m_nValue != pRoot2->m_nValue)
            return false;
    
        return DoesTree1HaveTree2(pRoot1->m_pLeft, pRoot2->m_pLeft) &&
            DoesTree1HaveTree2(pRoot1->m_pRight, pRoot2->m_pRight);
    }
    

      

  • 相关阅读:
    Tomcat部署项目
    正则表达式
    文件的上传和下载
    实现扫码登陆
    onepill Android端
    部署SpringBoot到阿里云
    Gson
    HTML自动刷新页面
    Spring Data JPA根据属性名查询
    Spring Date JPA实现增删改查
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4832109.html
Copyright © 2011-2022 走看看