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

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

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

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

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

#include  
#include  
#include  
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;
      
}  

你可能感兴趣的:(c语言菜鸟入门)