本文目录一览:
- 1、C++编写算法判断两棵二叉树是否相等
- 2、判断两个二叉树是否相等c语言
- 3、设计一个分治算法,判断两个二叉树是否相等。
- 4、数据结构问题"编写一个判断两颗二叉树是否相等的程序"
- 5、判断两棵二叉树是否相似 (用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);
}
}