php实现判断树的子结构

php实现判断树的子结构

一、总结

 很简单的递归判断

二、php实现判断树的子结构

题目描述:

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

三、代码

代码一:php ac

 1 <?php
 2  
 3 /*class TreeNode{
 4     var $val;
 5     var $left = NULL;
 6     var $right = NULL;
 7     function __construct($val){
 8         $this->val = $val;
 9     }
10 }*/
11 function HasSubtree($pRoot1, $pRoot2)
12 {
13     // write code here
14     if($pRoot1 == NULL || $pRoot2 == NULL){ //1、空值判断
15         return false;
16     }
17     return isSubtree($pRoot1, $pRoot2) ||
18         HasSubtree($pRoot1->left, $pRoot2) || HasSubtree($pRoot1->right, $pRoot2);
19 }
20  
21 function isSubtree($pRoot1, $pRoot2){
22     if( $pRoot2 == NULL){
23         return true;
24     }
25     if($pRoot1 == NULL){
26         return false;
27     }
28     return $pRoot1->val == $pRoot2->val && isSubtree($pRoot1->left, $pRoot2->left) && isSubtree($pRoot1->right, $pRoot2->right); //2、递归判断
29 }

代码二:

利用好短路特性,完全不用那么多flag

 1 class Solution {
 2     bool isSubtree(TreeNode* pRootA, TreeNode* pRootB) {
 3         if (pRootB == NULL) return true;
 4         if (pRootA == NULL) return false;
 5         if (pRootB->val == pRootA->val) {
 6             return isSubtree(pRootA->left, pRootB->left)
 7                 && isSubtree(pRootA->right, pRootB->right);
 8         } else return false;
 9     }
10 public:
11     bool HasSubtree(TreeNode* pRootA, TreeNode* pRootB)
12     {
13         if (pRootA == NULL || pRootB == NULL) return false;
14         return isSubtree(pRootA, pRootB) ||
15             HasSubtree(pRootA->left, pRootB) ||
16             HasSubtree(pRootA->right, pRootB);
17     }
18 };
原文地址:https://www.cnblogs.com/Renyi-Fan/p/9061864.html