[程序員代碼面試指南]二叉樹問題-判斷t1樹是否包含t2樹的所有拓撲結構

題解

  • 先序遍歷樹1,判斷樹1以每一個節點爲根的子樹是否包含樹2的拓撲結構。
  • 時間複雜度:O(M*N)
  • 注意區分判斷整體包含關係、和判斷子樹是否包含樹2的函數。

代碼

public class Main {
    public static void main(String args[]) {
        //test
                Node n1=new Node(1);
        Node n2=new Node(2);
        Node n3=new Node(3);
        Node n4=new Node(4);
        n1.left=n2;
        n1.right=n3;
        n3.left=n4;
        
        Node n5=new Node(3);
        Node n6=new Node(4);
        n5.left=n6;
        
        if(contains(n1,n5)) {
            System.out.print("contains");
        }
        else {
            System.out.print("not contains");
        }
    }
    
    public static boolean contains(Node root,Node rootTest) {
        if(rootTest==null) {
            return true;
        }
        if(root==null) {
            return false;
        }
        return check(root,rootTest)||contains(root.left,rootTest)||contains(root.right,rootTest);
    }
    
    public static boolean check(Node root,Node rootTest) {
        if(rootTest==null) {
            return true;
        }
        if(root==null||root.val!=rootTest.val) {
            return false;
        }
        return check(root.left,rootTest.right)&&check(root.right,rootTest.right);                                              
    }
}
相關文章
相關標籤/搜索