[摘要]本篇文章给大家带来的内容是关于php如何实现二叉树的子结构判断(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空...
本篇文章给大家带来的内容是关于php如何实现二叉树的子结构判断(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
输入两棵二叉树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)