首页 > 编程知识 正文

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

时间:2024-03-07 18:23:33 阅读:332034 作者:LCDM

本文目录一览:

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

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

笔试题目:C++编写算法判断两棵二叉树是否相等

题目:请实现两棵树是否相等的比较,相等返回0否则返回其他值。

解析:A、B两棵树相等,当且仅当RootA-c == RootB-c,而且A的.左右子树对应相等或者左右互换后相等。

思想是使用分治的方法,先判断当前节点是否相等(需要处理为空、是否都为空、是否相等),如果当前节点不相等,直接返回两棵树不相等;如果当前节点相等,那么就递归的判断他们的左右孩子是否相等。因为这里是普通的二叉树,所以A的左、右子树和B的右、左子树相等也是可以的。

C++代码:

#include

using namespace std;

typedef struct TreeNode{

char c;

struct TreeNode * left;

struct TreeNode * right;

};

/*判断两棵二叉树是否相等,如果相等返回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, 返回相等

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

2、程序源代码:

public class SimiliarTreeTest {

public static boolean test(BinNode t1,BinNode t2){

if(t1==nullt2==null)

return true;

else if(t1!=nullt2!=null)

{

return test(t1.left,t2.left)test(t1.right,t2.right);

}

return false;

}

}

3、测试类:

public class SimiliarilityTest {

public static void main(String[] args){

BSTInteger intTree=new BSTInteger();

BSTCharacter charTree=new BSTCharacter();

BSTString strTree=new BSTString();

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;istrs.length;i++){

strTree.insert(new BinNodeString(strs[i]));

}

for(int i=0;inumbers.length;i++)

intTree.insert(new BinNodeInteger(numbers[i]));

for(int i=0;ichars.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);

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。