한 나무가 다른 나무인지 아닌지 판단하는 자수 자바 구현

우리는 귀속적인 방법을 채택하여 한 그루의 나무가 다른 나무의 자수인지 아닌지를 판단한다
우리는 두 그루의 나무가 같은지, 즉 뿌리 노드를 먼저 비교한 다음에 좌우 노드를 비교하는 귀속 함수를 세웠다.
우리는 두 번째 나무가 첫 번째 나무의 자수인지 아닌지를 보아야 한다. 먼저 두 나무의 뿌리 노드가 같은지, 같으면 귀속함수를 호출하고, 다르면 첫 번째 나무의 좌우 자수와 두 번째 나무를 비교하고 귀속함수를 호출해야 한다.
주의: 이 프로그램은 프로그램의 노봉성을 고려해야 한다. 두 번째 나무가 비어 있으면 첫 번째 나무가 비어 있지 않으면 두 번째 나무는 첫 번째 나무의 자수이고 반대로 안 된다.
소스 코드는 다음과 같습니다.
/**
 *                 
 */
public class HasSubtree {
    public HasSubtree() {
    }

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

        public TreeNode(int val) {
            this.val = val;
        }
    }
    public static boolean HasSubtree(TreeNode root1,TreeNode root2) {
        boolean result=false;
        //  root1 root2  null
        if (root1!=null&&root2!=null){
            //         
            if (root1.val==root2.val){
                result=isHaveTree(root1,root2);
            }
            if (!result){
                result=HasSubtree(root1.left,root2);
            }
            if (!result){
                result=HasSubtree(root1.right,root2);
            }
        }
        return result;
    }

    /**
     *          
     * @return
     */
    public static boolean isHaveTree(TreeNode root1,TreeNode root2) {
        //          true
        if (root2==null){
            return true;
        }
        //          false
        if (root1==null){
            return false;
        }
        //    
        if (root1.val!=root2.val){
            return false;
        }
        //    
        return  isHaveTree(root1.left,root2.left)&&isHaveTree(root1.right,root2.right);
    }

}

좋은 웹페이지 즐겨찾기