介绍
这篇文章将为大家详细讲解有关c++如何检查两个二进制搜索树是否相同,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
给定两个二叉搜索树的根节点。如果两个二进制搜索树是相同的,则打印1,否则打印0。如果两个树在结构上相同且节点具有相同的值,则它们是相同的。
在上面的图像中,tree1和tree2都是相同的。
为了确定两棵树是否相同,我们需要同时遍历两棵树,并且在遍历时我们需要比较树木的数据和子节点。
<强>以下是逐步算法,以检查两个BST是否相同:强>
1。如果两棵树都是空的,则返回1 .
2。否则,如果两棵树都是非空的
——检查根节点的数据(tree1→data=https://www.yisu.com/zixun/=tree2 ->数据)
——递归检查左子树,即调用sameTree (tree1→left_subtree, tree2→left_subtree)
-递归检查右子树,即调用sameTree (tree1→right_subtree, tree2→right_subtree)
-如果上述三个步骤中返回的值为true,则返回1 .
3。否则返回0(一个是空的而另一个不是)。
<强>以下是上述方法的实现:强>
//c++程序检查两个bst是否相同 # include & lt; iostream> 使用名称空间性病;//BST节点 结构节点{ int数据; 结构节点*左; 结构节点*正确; };//创建新节点的实用程序函数 结构节点* newNode (int数据) { 结构节点*节点=(struct节点*) malloc (sizeof (struct节点)); 节点→数据=https://www.yisu.com/zixun/data; 节点->左=零; 节点——>=零; 返回节点; }//函数执行顺序遍历 无效”(节点*根) { 如果(root==NULL) 返回; 有条不紊地进行(根->左); cout <<根->数据”; 有条不紊地进行(根->右); }//函数检查两个bst是否相同 * root1 int isIdentical(节点、节点* root2) {//检查这两棵树是否都是空的 如果(root1==NULL & & root2==NULL) 返回1;//如果树中的任意一个为非空,另一个为空,则返回错误的 else if(零& & root2 root1 !===NULL) 返回0; else if (root1==NULL & & root2 !=NULL) 返回0; 其他{//检查两个树的当前数据是否相等,并递归地检查左子树和右子树 如果(root1 ->数据==& & isIdentical root2 ->数据(root1 ->左,root2 ->左) & & isIdentical (root1 ->对,root2 ->右)) 返回1; 其他的 返回0; } }//驱动代码 int main () { 结构节点* root1=newNode (5); 结构节点* root2=newNode (5); root1 ->左=newNode (3); root1 ->右=newNode (8); root1 ->左->左=newNode (2); root1 ->左->右=newNode (4); root2 ->左=newNode (3); root2 ->右=newNode (8); root2 ->左->左=newNode (2); root2 ->左->右=newNode (4); 如果(isIdentical (root1 root2)) cout <癰st都是相同的”; 其他的 cout <癰st不相同”; 返回0; }
输出:
bst都相同的
关于c++如何检查两个二进制搜索树是否相同就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。