博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[PHP] 算法-二叉树的子结构判断的PHP实现
阅读量:6246 次
发布时间:2019-06-22

本文共 1909 字,大约阅读时间需要 6 分钟。

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)1.子树的意思是包含了一个节点,就得包含这个节点下的所有节点,两棵树同时到底2.子结构可以是A树的任意一部分思路:1.第一个递归:A和B两棵树,先在A中找到与B的根结点相同的点,如果A的根不是,那就递归A的左右子树来找2.第二个递归:从两棵树的根结点开始进行比较,遍历的过程中,如果B树为空,则返回true;如果B不为空,A为空,返回false              A树的结点值与B树的不同,返回false;              短路运算符&& ,递归A的左子树,B的左子树;递归A的右子树,B的右子树HasSubtree(treeA,treeB)    if(treeA->val==treeB->val)//根结点相同        res=tree1HasTreeB(treeA.treeB)    if !res        res=HasSubtree(treeA->left.treeB)//第一层遍历    if !res        res=HasSubtree(treeA->right.treeB)//第一层遍历    return restree1HasTreeB(treeA,treeB)    //顺序不能变    if treeB==null  //B到底的时候,就是true        return true    if treeA==null        return false//B没到底,A到底了,就是false    if treeA->val!=treeB->val //A和B的结点没对上        return false    //短路语法 ,如果前面的是false,直接返回false,后面不用走    return tree1HasTreeB(treeA->left,treeB->left)&&tree1HasTreeB(treeA->right,treeB->right)

 

val = $val; } }//构造两棵树$node1=new TreeNode(1);$node2=new TreeNode(2);$node3=new TreeNode(3);$node4=new TreeNode(4);$node5=new TreeNode(5);$treeA=$node1;$node1->left=$node2;$node1->right=$node3;$node3->left=$node4;$node3->right=$node5;//var_dump($treeA);$node6=new TreeNode(3);$node7=new TreeNode(4);$node6->left=$node7;$treeB=$node6;//var_dump($treeB);function HasSubtree($pRoot1,$pRoot2){ $res=false; if($pRoot1==null || $pRoot2==null) return $res; if($pRoot1->val==$pRoot2->val) $res=tree1HasTree2($pRoot1,$pRoot2); if(!$res) $res=HasSubtree($pRoot1->left,$pRoot2); if(!$res) $res=HasSubtree($pRoot1->right,$pRoot2); return $res;}function tree1HasTree2($treeA,$treeB){ if($treeB==null) return true; if($treeA==null) return false; if($treeA->val!=$treeB->val) return false; return tree1HasTree2($treeA->left,$treeB->left)&&tree1HasTree2($treeA->right,$treeB->right);}var_dump(HasSubtree($treeA,$treeB));

 

转载于:https://www.cnblogs.com/taoshihan/p/9721241.html

你可能感兴趣的文章
VM各寄存器作用
查看>>
jupyter Notebook环境搭建
查看>>
python文件上传的三种方式
查看>>
python基础学习18----面向对象简述
查看>>
Android Browser学习三 多窗口: 展示第一个Tab的过程
查看>>
java资源下载之官网地址
查看>>
学习java字符串编码总结
查看>>
Debussy---快速上手(2)
查看>>
light oj 1079 - Just another Robbery 【01背包】
查看>>
Scrapy爬虫入门
查看>>
c++运算符重载
查看>>
Advanced Auto Layout:Size-Class-Specific Layout
查看>>
给SVN或者TortoiseSVN设置代理的方法
查看>>
无法打开项目文件web.csproj,此安装不支持该项目类型
查看>>
C++ function/bind
查看>>
ASP.NET MVC4 Forms 登录验证
查看>>
windows和ubuntn互传文件
查看>>
vue router mode 设置"hash"与"history"的区别
查看>>
dotnet --info
查看>>
运算符优先级
查看>>