[算法]树的子结构

题目描述

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

思路

若根节点相等,利用递归比较他们的子树是否相等,若根节点不相等,则利用递归分别在左右子树中查找。

代码

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1 == null || root2 == null){
            return false;
        }else{
            return tree1HasTree2(root1, root2) ? true : HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
        }
    }
    
    public boolean tree1HasTree2(TreeNode t1, TreeNode t2){
        //如果Tree2已经遍历完了都能对应的上,返回true
        if(t2 == null){
            return true;
        }
        //如果Tree2还没有遍历完,Tree1却遍历完了。返回false
        if(t1 == null){
            return false;
        }
        //如果其中有一个点没有对应上,返回false
        if(t1.val != t2.val){
            return false;
        }
        //如果根节点对应的上,那么就分别去子节点里面匹配
        return tree1HasTree2(t1.left, t2.left) &&
                tree1HasTree2(t1.right, t2.right);
    }
}
原文地址:https://www.cnblogs.com/DarrenChan/p/10267525.html