首页 > 解决方案 > 检查两棵树是否具有相同的结构

问题描述

只传递 BST 类型的对象而不是 Node 类型的对象,这里的逻辑是错误的,我需要一些帮助,它总是返回 false

bool BST<T>::similarStructure(BST<T>& Tree2) {
    if (isEmpty()) {
        cout << "tree is empty\n";
        return;
    }

    StackArray<node<T>> *s1, *s2; // s1 for traversal,, s2 for printing

    s1->Push(root);
    s2->Push(tree2.root);
    while (!s1.IsEmpty() &&!s2.isempty()) {
        node<T> n = s1->Pop();
        node<T> n1=s2->Pop();
        if (n->right != NULL && n1->right!=NULL){
            s1.Push(n->right);
            s2.Push(n1->right); }
         else{
           return false;}

        if (n->left != NULL && n->left!=NULL){
            s1.Push(n->left); 
            s2.Push(n1->left);}
        else{
            return false;}

    }
    return true;
}

标签: c++11

解决方案


以最简单的情况为例,lhs 树和 rhs 树都只有一个节点。

在 while 循环中,当遇到第一个条件表达式if (n->right != NULL && n1->right!=NULL), sincen->right == NULL时,该表达式的值为 false,因此该函数返回 false。


推荐阅读