您的位置:

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

本文目录一览:

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);

}

}

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

2022-11-24
二叉树的前序遍历c语言,二叉树前序遍历c语言代码

2022-11-25
c语言八叉树,二叉树构造c语言实现

2022-11-26
以图判树c语言,c语言关于树的算法

2023-01-05
数据结构c语言二叉树的查找,数据结构c语言版二叉树代码

2022-11-22
输出二叉树的层次遍历c语言,遍历二叉树C语言

2023-01-04
层次遍历构建二叉树c语言,c语言二叉树的创建与遍历

2023-01-06
二叉树按层输出c语言,C语言二叉树怎么输入数据

2022-11-24
c语言层序遍历创建二叉树,二叉树的建立与遍历完整代码C语言

2022-11-23
c语言二叉树的度,c++二叉树的深度

2023-01-05
用c语言将二叉树转换为双向链表,二叉树转化为二叉链表

2022-11-29
二分图判定c语言,二分查找c语言代码

2022-11-29
c语言单链表以及二叉树中创建时,编写函数,输入字符序列,建立

2022-11-29
二叉树的c语言程序求教,c语言创建二叉树代码

2023-01-06
c语言求二叉树最大深度,c语言求二叉树高度

2022-11-25
c语言二叉排序,c语言创建排序二叉树

2022-12-02
用c语言判定两个圆是否相交,C语言判断点和圆的关系

2022-11-24
后序遍历二叉树的递归算法c语言,实现二叉树的后序遍历的非递归

2023-01-03
用c语言判断某一年是否为闰年,c语言判断是否为闰年

2023-01-04
二项队列实现文件c语言,c语言实现一个队列

2023-01-04