c++如何检查两个二进制搜索树是否相同

  介绍

这篇文章将为大家详细讲解有关c++如何检查两个二进制搜索树是否相同,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

给定两个二叉搜索树的根节点。如果两个二进制搜索树是相同的,则打印1,否则打印0。如果两个树在结构上相同且节点具有相同的值,则它们是相同的。

 c + +如何检查两个二进制搜索树是否相同

在上面的图像中,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++如何检查两个二进制搜索树是否相同就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

c++如何检查两个二进制搜索树是否相同