树的子结构(JAVA)

树的子结构

  

  题目描述

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 1     public boolean HasSubtree(TreeNode root1, TreeNode root2) {
 2         boolean res = false;
 3         if(root2!=null&&root1!=null) {
 4             if (root1.val == root2.val)
 5                 //注意这里不能直接返回,因为即使root1的值等于root2了,
 6                 // 从根节点开始遍历时,最终若是不满足B为A的子树。但这不能说明B就真的不是A的子树了,因为还可能存在有其他节点值
 7                 //和root2的根节点值相同,可以从那里开始找
 8                 res = helper(root1,root2);
 9             if(!res)
10                 /*
11                 两种情况:(1)根节点值相等,但是后续不满足条件
12                     (2)根节点值就已经不相等了,直接在A树种继续找和B树根节点值相等的节点
13                  */
14                 res = HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
15         }
16         return res;
17     }
18 
19     private boolean helper(TreeNode root1, TreeNode root2) {
20         if(root2==null)
21             return true;
22         else {
23             if (root1 == null) return false;
24         }
25         if(root1.val!=root2.val)
26             return false;
27         return helper(root1.left,root2.left)&&helper(root1.right,root2.right);
28     }

猜你喜欢

转载自www.cnblogs.com/ztqup666/p/9266905.html