zoukankan      html  css  js  c++  java
  • 数据结构练习(38)树的子结构

    http://zhedahht.blog.163.com/blog/static/25411174201011445550396/

    思路:

    2个递归,总体来说思路还是比较自然的。但是如何把代码写的优雅,包括一些边界的检查,还是一件需要雕琢的事情。

    文章中关于子树判断的递归处理的很好,代码十分精简:

    bool DoesTree1HaveAllNodesOfTree2(TreeNode* pTreeHead1, TreeNode* pTreeHead2)
    {
            if(pTreeHead2 == NULL)
                    return true;
     
            if(pTreeHead1 == NULL)
                    return false;
     
            if(pTreeHead1->m_nValue != pTreeHead2->m_nValue)
                    return false;
     
            return DoesTree1HaveAllNodesOfTree2(pTreeHead1->m_pLeft, pTreeHead2->m_pLeft) &&
                    DoesTree1HaveAllNodesOfTree2(pTreeHead1->m_pRight, pTreeHead2->m_pRight);
    }
    struct TreeNode {
        int m_value;
        TreeNode* m_lhs;
        TreeNode* m_rhs;
    };
    
    bool try2solve(TreeNode* pHead1, TreeNode* pHead2)
    {
        if (pHead2 == NULL)
            return true;
        if (pHead1 == NULL)
            return false;
    
        if (pHead1->m_value != pHead2->m_value)
            return false;
    
        return try2solve(pHead1->m_lhs, pHead2->m_lhs) && try2solve(pHead1->m_rhs, pHead2->m_rhs);
    }
    
    bool HasSubTree(TreeNode* pTreeHead1, TreeNode* pTreeHead2)
    {
        if (pTreeHead1 == NULL || pTreeHead2 == NULL)
            return false;
    
        bool result = false;
    
        if (pTreeHead1->m_value == pTreeHead2->m_value)
            result = try2solve(pTreeHead1, pTreeHead2);
    
        if (!result && pTreeHead1->m_lhs)
            result = HasSubTree(pTreeHead1->m_lhs, pTreeHead2);
        if (!result && pTreeHead1->m_rhs)
            result = HasSubTree(pTreeHead1->m_rhs, pTreeHead2);
    
        return result;
    }
    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    L1-012 计算指数
    L1-011 A-B
    L1-010 比较大小
    Django--登录
    Django--跨域设置
    Django--视图装饰器
    Django--URL配置
    Django--多数据库
    Django--channels
    Django--日志
  • 原文地址:https://www.cnblogs.com/kedebug/p/2828210.html
Copyright © 2011-2022 走看看