zoukankan      html  css  js  c++  java
  • 50. 树的子结构[subtree structure in tree]

    【本文链接】

    http://www.cnblogs.com/hellogiser/p/subtree-structure-in-tree.html

    题目】

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

     C++ Code 
    1
    2
    3
    4
    5
    6
     
    struct BinaryTreeNode
    {
        
    int value;
        BinaryTreeNode *left;
        BinaryTreeNode *right;
    };

    如下图,右边的二叉树是左边二叉树的子结构。

    请实现bool HasSubTree(BinaryTreeNode *parent, BinaryTreeNode *child)函数。

    分析

    可以用递归的方法求解。

    递归的base case终止条件:

    如果child为空,返回true;否则如果parent为空,则返回false。

    然后判断parent和child的值是否相等:

    (1)如果相等,则递归判断parent的左子树是否包含child的左子树,递归判断parent的右子树是否包含child的右子树;只有左右子树同时包含,返回true,否则返回false。

    (2)如果不相等,递归判断parent的左子树是否包含child子树,递归判断parent的右子树是否包含child子树;只要其中之一包含,返回true,否则返回false。

    【代码】

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    // whether parent tree has child subtree
    bool HasSubTree(BinaryTreeNode *parent, BinaryTreeNode *child)
    {
        
    // base cases
        if (NULL == child)
            
    return true;
        
    else if(NULL == parent)
            
    return false;

        
    // whether parent and child values are equal
        if (parent->value == child->value)
        {
            
    bool bLeft = HasSubTree(parent->left, child->left);
            
    bool bRight = HasSubTree(parent->right, child->right);
            
    return bLeft && bRight;
        }
        
    else
        {
            
    bool bLeft = HasSubTree(parent->left, child);
            
    bool bRight = HasSubTree(parent->right, child);
            
    return bLeft || bRight;
        }
    }

    【参考】

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

    http://blog.csdn.net/lalor/article/details/7618131

    http://zhuyanfeng.com/archives/3165

    【本文链接】

    http://www.cnblogs.com/hellogiser/p/subtree-structure-in-tree.html

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    C++ 共用体
    C++ 作用域内枚举
    C++ 作用域为类的常量
    C++ 类作用域
    C++ 对象数组
    C++ this指针
    C++ const成员函数
    C++ 对象的初始化和赋值
    C++ 析构函数
    乌班图 之 apt命令 及 VMware共享文件夹
  • 原文地址:https://www.cnblogs.com/hellogiser/p/subtree-structure-in-tree.html
Copyright © 2011-2022 走看看