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);
    }
    

      

  • 相关阅读:
    mysql表检查分析优化
    mysql表存储
    mysql表空间文件
    mysql回滚日志
    mysql重做日志
    mysql二进制日志
    最佳高质量字体
    mysql存储引擎
    如何提取app软件的apk格式中的字体?
    tar split命令
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4832109.html
Copyright © 2011-2022 走看看