C++数据结构 判断两棵二叉树是否相似

按先序遍历序列建立两个二叉树的二叉链表 A 和链表 B ,设计算法判断 A 、 B 二叉树是否相似。

注:其中“#”表示的是空格,空格字符代表空树。

测试输入
ab#c##d##↵
xc#v##b##↵
期待的输出
A与B相似↵

测试输入
ab#c##d##↵
gv##d##↵`
期待的输出
A与B不相似↵

#include<iostream>  
#include<string>  
#include<cstdio>  
using namespace std;  
  
class binarytreenode {  
public:  
    char data;  
    binarytreenode * Lchild, * Rchild;  
  
    binarytreenode() { Lchild = NULL; Rchild = NULL; }  
      
};  
class binarytree {  
public:  
    binarytreenode * root;  
    binarytree() { root =NULL; }  
  
    void createtree( binarytreenode * &p)  
    {  
        char ch;  
        cin >> ch;  
        if (ch == '\n')  
            return;  
  
        if (ch == '#')  
            p = NULL;  
        else  
        {  
            p = new binarytreenode();  
            if (!p)  
                exit(-1);  
            p->data = ch;  
      
            createtree(p->Lchild);  
  
            createtree(p->Rchild);  
            return;  
        }  
    }  
  
};  
bool similar(binarytreenode *t1, binarytreenode *t2)  
{  
    bool leftS = false, rightS = false;  
    if (t1 == NULL && t2 == NULL) // 两树皆空  
        return true;  
    else if (t1 == NULL || t2 == NULL) // 只有一个树为空  
        return false;  
    else // 递归地进行判断  
    {  
        leftS = similar(t1->Lchild, t2->Lchild);  
        rightS = similar(t1->Rchild, t2->Rchild);  
        return leftS && rightS;  
    }  
}  
  
int main()  
{  
    binarytree x, t;  
  
    x.createtree(x.root);  
  
    t.createtree(t.root);  
  
    bool flag;  
    flag=similar(x.root, t.root);  
    if (flag)  
        cout << "A与B相似\n";  
    else  
        cout << "A与B不相似\n";  
  
  return 0;
      
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值