码迷,mamicode.com
首页 > 其他好文 > 详细

树的子结构

时间:2018-12-26 17:46:38      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:void   cin   color   double   b树   结构   思路   cout   stream   

题目

输入两颗二叉树A,B,判断B是不是A的子结构。

思路

  1. 首先在A树中进行遍历,找到值与B树相同的根节点
  2. 以A树中找到的根节点进行遍历,判断是否与B树有相同的结构
#include <iostream>
using namespace std;
struct tree
{
    double data;
    struct tree *left,*right;
    tree(int d=0):data(d)
    {
        left=right=nullptr;
    }
};

class Solution
{
    public:
        void create(tree *&root);
        void pre_order(tree *root);
        bool has_tree(tree *r1,tree *r2);
        bool has_tree_core(tree *r1,tree *r2);
        bool equal(double a,double b);
        tree *root;    
};
void Solution::create(tree *&root)
{
    double x;
    cin>>x;
    if(x==0)
        root=nullptr;
    else
    {
        root=new tree();
        root->data=x;
        create(root->left);
        create(root->right);
    }
}
bool Solution::has_tree(tree *r1,tree *r2)
{
    bool res=false;
    if(r1&&r2)
    {
        if(equal(r1->data,r2->data))
            res=has_tree_core(r1,r2);
        if(!res)
            res=has_tree(r1->left,r2);
        if(!res)
            res=has_tree(r1->right,r2);
    }
    return res;
}
bool Solution::has_tree_core(tree *r1,tree *r2)
{
    //循环结束条件是各自到达了自己的叶子结点 
    if(!r2)
        return true;//r2到达了叶子结点,返回true 
    if(!r1)
        return false;//r1到达了叶子结点,r2还没到达,返回false 
        
    if(!equal(r1->data,r2->data))
        return false;
    return has_tree_core(r1->left,r2->left)&&has_tree_core(r1->right,r2->right);
}
bool Solution::equal(double a,double b)
{
    if((a-b>-0.0000001)&&(a-b<0.0000001))
        return true;
    else
        return false;
}
void Solution::pre_order(tree *root)
{
    if(root)
    {
        cout<<root->data<<endl;
        pre_order(root->left);
        pre_order(root->right);
    }
}
int main()
{
    Solution s,S;
    s.create(s.root);
    S.create(S.root);
    //s.pre_order(s.root);
    cout<<s.has_tree(s.root,S.root)<<endl;
    return 0;
}

 

树的子结构

标签:void   cin   color   double   b树   结构   思路   cout   stream   

原文地址:https://www.cnblogs.com/tianzeng/p/10180232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!