[PHP] 算法-二叉树的子结构判断的PHP实现
2018-09-28 22:09
537 查看
输入两棵二叉树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 res tree1HasTreeB(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)
<?php class TreeNode{ public $val; public $left = NULL; public $right = NULL; public function __construct($val){ $this->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));
相关文章推荐
- [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现
- [PHP] 算法-镜像二叉树的PHP实现
- [PHP]算法-二叉树中和为某一值的路径的PHP实现
- java实现输入两棵二叉树A,B,判断B是不是A的子结构
- 输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)
- PHP实现判断二叉树是否对称的方法
- [PHP]算法- 二叉树的深度的PHP实现
- 用php实现基本二叉树和排序二叉树
- PHP实现转盘抽奖算法分享
- 数据结构编程笔记十五:第六章 树和二叉树 树和二叉树的转换算法实现
- 二叉树实现运算符优先级算法,支持表达式前缀,中缀,后缀,层次,广义表输出
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
- c语言实现二叉树常用算法
- php实现二叉树中和为某一值的路径方法
- PHP 实现 一致性哈希 算法(转的)
- php实现的算法题
- PHP 实现(递归)二叉树的先序、中序、后序
- 笔试面试算法经典--二叉树的子结构(Java)