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

      

  • 相关阅读:
    全排列 next_permutation()函数
    hdu1247
    hdu3518
    pku2774 求最长公共子串
    hdu3460 Ancient Printer
    pku2001
    pku 3261
    NOI.AC#2007light【根号分治】
    CF1370F2The Hidden Pair(Hard Version)【交互题,二分】
    P3335[ZJOI2013]蚂蚁寻路【dp】
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4832109.html
Copyright © 2011-2022 走看看