剑指 Offer 26. 树的子结构

package leetcode;

import java.util.LinkedList;
import java.util.Queue;

public class offer_26 {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if(A==null||B==null) {return false;}
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        queue.add(A);
        while(!queue.isEmpty()) {
            TreeNode node=queue.poll();
            //找出B树在A树中根节点相同的位置
            if(node.val==B.val) {
                if(compare(node, B)==true) {
                    return true;
                }
            }
            if(node.left!=null) {
                queue.add(node.left);
            }
            if(node.right!=null) {
                queue.add(node.right);
            }
        }
        
        return false;
    }
    
    
    public boolean compare(TreeNode A,TreeNode B) {
        
        //B树递归至底都是相同的,则相同
        if(B==null) {
            return true;
        }
        
        //A树为空B树不为空,则不是相同的
        if(A==null) {
            return false;
        }
        
        //AB树节点值不相等也不同
        if(A.val!=B.val) {
            return false;
        }
        
        //同时递归左节点和右节点
        return compare(A.left, B.left)&&compare(A.right, B.right);
    }
}

 

posted on 2022-03-08 15:52  一仟零一夜丶  阅读(17)  评论(0)    收藏  举报