[程序员代码面试指南]二叉树问题-树1是否包含树2的拓扑结构

Posted coding-gaga

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[程序员代码面试指南]二叉树问题-树1是否包含树2的拓扑结构相关的知识,希望对你有一定的参考价值。

题解

  • 先序遍历树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);??????                                        
    

以上是关于[程序员代码面试指南]二叉树问题-树1是否包含树2的拓扑结构的主要内容,如果未能解决你的问题,请参考以下文章

[程序员代码面试指南]二叉树问题-找到二叉树中两节点最近公共祖先

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表★★

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表

[程序员代码面试指南]二叉树问题-派对的最大快乐值

左神算法书籍《程序员代码面试指南》——3_02打印二叉树的边界节点★★

47期六大类二叉树面试题汇总解答