本文目录一览:
- C++编写算法判断两棵二叉树是否相等
- 判断两个二叉树是否相等c语言
- 设计一个分治算法,判断两个二叉树是否相等。
- 数据结构问题"编写一个判断两颗二叉树是否相等的程序"
- [判断两棵二叉树是否相似 (用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语言通常可以用递归的函数来实现。在这个递归函数里,总的值函数,就等于根据碘元素相同,并且左子树相等,并且右子树相等。
设计一个分治算法,判断两个二叉树是否相等。
判断当前节点是否相等,各个子树是否相等,嵌套调用。 输入当前节点,输出是否相等。
- 判断当前节点是否相等,不等则返回不等。
- 判断左子树是否相等,不等则返回不等。
- 判断左子树是否相等,不等则返回不等。
- 返回相等。
数据结构问题"编写一个判断两颗二叉树是否相等的程序"
- 程序源代码:
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;
}
}
- 测试类:
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);
}
}