首页 > 其他 > 详细

树的子结构

时间:2017-12-23 16:18:41      阅读:168      评论:0      收藏:0      [点我收藏+]

题目描述

  输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
  思路:两个递归函数,一个负责遍历树A;另一个负责判断由树A中某一个节点作为根节点的子树是否和树B结构一样
bool isSubTree(TreeNode *pRoot1, TreeNode *pRoot2)//判断是否为子树函数
{
    if(!pRoot2)return true;
    if(!pRoot1)return false;
    if(pRoot1->val != pRoot2->val)return false;
    return isSubTree(pRoot1->left, pRoot2->left) && isSubTree(pRoot1->right, pRoot2->right);
}
void DFS(TreeNode *pRoot1, TreeNode *pRoot2, bool &res)//遍历函数
{
    if(res==true)return;//如果res已经被置为true,提前终止,避免无谓的判断
    if(pRoot1->val == pRoot2->val)res=isSubTree(pRoot1->left, pRoot2->left) && isSubTree(pRoot1->right, pRoot2->right);
    if(pRoot1->left)DFS(pRoot1->left, pRoot2, res);
    if(pRoot1->right)DFS(pRoot1->right, pRoot2, res);
}
class Solution {
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        bool res=false;
        if(!pRoot1 || !pRoot2)return res;
        DFS(pRoot1, pRoot2, res);
        return res;
    }
};

 

树的子结构

原文:http://www.cnblogs.com/jeysin/p/8093484.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!