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

      

  • 相关阅读:
    树状数组进阶
    洛谷 P2824 [HEOI2016/TJOI2016]排序
    抽象类
    关于getClass()和instanceof的区别与联系
    Java中的强制类型转换
    Java中的内联
    Java关键字之final
    Java中的"is-a"规则
    关于虚方法
    Java中的动态绑定
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4832109.html
Copyright © 2011-2022 走看看