判断两个二叉树是否相等c语言,判断两个二叉树是否相等c语言是否正确

发布时间:2022-11-24

本文目录一览:

  1. C++编写算法判断两棵二叉树是否相等
  2. 判断两个二叉树是否相等c语言
  3. 设计一个分治算法,判断两个二叉树是否相等。
  4. 数据结构问题"编写一个判断两颗二叉树是否相等的程序"
  5. [判断两棵二叉树是否相似 (用c完成) 要能运行的 谢谢](#判断两棵二叉树是否相似 (用c完成) 要能运行的 谢谢)

C++编写算法判断两棵二叉树是否相等

C编写算法判断两棵二叉树是否相等 笔试题目:C编写算法判断两棵二叉树是否相等 题目:请实现两棵树是否相等的比较,相等返回0否则返回其他值。 解析:A、B两棵树相等,当且仅当RootA->c == RootB->c,而且A的左右子树对应相等或者左右互换后相等。 思想是使用分治的方法,先判断当前节点是否相等(需要处理为空、是否都为空、是否相等),如果当前节点不相等,直接返回两棵树不相等;如果当前节点相等,那么就递归的判断他们的左右孩子是否相等。因为这里是普通的二叉树,所以A的左、右子树和B的右、左子树相等也是可以的。 C++代码:

#include <iostream>
using namespace std;
typedef struct TreeNode{
    char c;
    struct TreeNode * left;
    struct TreeNode * right;
}TreeNode;
/*判断两棵二叉树是否相等,如果相等返回0,如果不相等则返回1*/
int compareTree(TreeNode* tree1, TreeNode* tree2){
    //用分治的方法做,比较当前根,然后比较左子树和右子树
    bool tree1IsNull = (tree1==NULL);
    bool tree2IsNull = (tree2==NULL);
    if(tree1IsNull != tree2IsNull){
        return 1;
    }
    if(tree1IsNull && tree2IsNull){
        //如果两个都是NULL,则相等
        return 0;
    }
    //如果根节点不相等,直接返回不相等,否则的话,看看他们孩子相等不相等
    if(tree1->c != tree2->c){
        return 1;
    }
    return (compareTree(tree1->left,tree2->left) && compareTree(tree1->right,tree2->right))
        || (compareTree(tree1->left,tree2->right) && compareTree(tree1->right,tree2->left));
}

判断两个二叉树是否相等c语言

判断两个二叉树是否相等c语言通常可以用递归的函数来实现。在这个递归函数里,总的值函数,就等于根据碘元素相同,并且左子树相等,并且右子树相等。

设计一个分治算法,判断两个二叉树是否相等。

判断当前节点是否相等,各个子树是否相等,嵌套调用。 输入当前节点,输出是否相等。

  1. 判断当前节点是否相等,不等则返回不等。
  2. 判断左子树是否相等,不等则返回不等。
  3. 判断左子树是否相等,不等则返回不等。
  4. 返回相等。

数据结构问题"编写一个判断两颗二叉树是否相等的程序"

  1. 程序源代码:
public class SimiliarTreeTest {
    public static boolean test(BinNode t1,BinNode t2){
        if(t1==null && t2==null)
            return true;
        else if(t1!=null && t2!=null){
            return test(t1.left,t2.left) && test(t1.right,t2.right);
        }
        return false;
    }
}
  1. 测试类:
public class SimiliarilityTest {
    public static void main(String[] args){
        BST<Integer> intTree=new BST<Integer>();
        BST<Character> charTree=new BST<Character>();
        BST<String> strTree=new BST<String>();
        Integer[] numbers={14,15,2,26,36,11,25,58,47,44,16,1};
        Character[] chars={14,15,2,26,36,11,25,58,47,44,16,1};
        String[] strs={"this","is ","so ","dispointed","and ","i ","am","trying"};
        for(int i=0; i<strs.length; i++){
            strTree.insert(new BinNodeString(strs[i]));
        }
        for(int i=0; i<numbers.length; i++)
            intTree.insert(new BinNodeInteger(numbers[i]));
        for(int i=0; i<chars.length; i++)
            charTree.insert(new BinNodeCharacter(chars[i]));
        boolean b=SimiliarTreeTest.test(intTree.root, strTree.root);
        System.out.println("intTree and strTree are similiar with each other?"+b);
        System.out.println("-----------------");
        b=SimiliarTreeTest.test(intTree.root, charTree.root);
        System.out.println("intTree and charTree are similiar with each other?"+b);
    }
}

(注明:其中BST为二叉查找树)

判断两棵二叉树是否相似 (用c++完成) 要能运行的 谢谢

bool IsSimilar(const BiTree T1, const BiTree T2){
    if (!T1 && !T2) //如果都是空树,则相似
    {
        return true;
    }
    else if (!T1 || !T2) //如果一者是空树,另一者不为空树,则不相似
    {
        return false;
    }
    else //否则是否相似还需进一步判断
    {
        if (IsSimilar(T1->Lchild, T2->Lchild) && IsSimilar(T1->Rchild, T2->Rchild)) //此时判断左右子树是否都相似
        {
            return true; //如果是,则二叉树相似
        }
        else
        {
            return false; //否则不相似
        }
    }
}

二叉树的存储类型是严奶奶的数据结构教的,所以自己把结构补全就可以运行了。 另外有人还比较了数据域的信息,相似只是结构上相同,或者说同构,不需要数据域相同,否则就是全等了。 还有,注意下面这种算法是错误的:

bool IsSimilar(const BiTree T1, const BiTree T2){
    if (!T1 && !T2) //如果都是空树,则相似
    {
        return true;
    }
    else if (!T1 || !T2) //如果一者是空树,另一者不为空树,则不相似
    {
        return false;
    }
    else //否则是否相似还需进一步判断
    {
        return IsSimilar(T1->Lchild, T2->Lchild);
        return IsSimilar(T1->Rchild, T2->Rchild);
    }
}