树的子结构

解题思路

  对于树的子结构,首先注意空树不是任何树的子结构,所以我们要先解决root1或者root2为空的情况,其次在root1中查看有没有root2的根节点,如果存在root2的根节点则比较两棵树是否相同

问题描述

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

代码实现

 1 /**
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9     }
10 }
11 */
12 public class Solution {
13     public boolean HasSubtree(TreeNode root1,TreeNode root2) {
14         boolean flag = false;
15         if(root2 == null || root1 == null) return false;
16         if(root1.val == root2.val){
17             flag = DoseHastree(root1, root2);
18         }
19         if(flag == false){
20             flag = HasSubtree(root1.right, root2)||HasSubtree(root1.left, root2);
21         }
22         return flag;
23     }
24     public boolean DoseHastree(TreeNode root1, TreeNode root2){
25         if(root2 == null) return true; //如果root2先遍历完这说明为root1的子结构
26         if(root1 == null) return false;
27         if(root1.val == root2.val){
28             return DoseHastree(root1.left, root2.left)&&DoseHastree(root1.right, root2.right);
29         }
30         else{
31             return false;
32         }
33     }
34 }
原文地址:https://www.cnblogs.com/wanglinyu/p/8525654.html