Subtree(java)

Subtree

You have two every large binary trees: T1, with millions of nodes, and T2, with hundreds of nodes. Create an algorithm to decide if T2 is a subtree of T1.

Have you met this question in a real interview?  
Yes
Example

T2 is a subtree of T1 in the following case:

       1                3
      / \              / 
T1 = 2   3      T2 =  4
        /
       4

T2 isn't a subtree of T1 in the following case:

       1               3
      / \               \
T1 = 2   3       T2 =    4
        /
       4
package campus.lintCode;

public class SubTree {
	public static void main(String[] args) {
		TreeNode treeNode1 = new TreeNode(1);
		TreeNode treeNode21 = new TreeNode(1);
		TreeNode treeNode22 = new TreeNode(1);
		TreeNode treeNode31 = new TreeNode(2);
		TreeNode treeNode32 = new TreeNode(3);
		TreeNode treeNode34 = new TreeNode(2);
		TreeNode treeNode43 = new TreeNode(4);
		TreeNode treeNode44 = new TreeNode(5);
		TreeNode treeNode45 = new TreeNode(3);
		treeNode1.left = treeNode21;
		treeNode1.right = treeNode22;
		treeNode21.left = treeNode31;
		treeNode21.right = treeNode32;
		treeNode22.right = treeNode34;
		treeNode32.left = treeNode43;
		treeNode32.right = treeNode44;
		treeNode34.left = treeNode45;

		TreeNode treeNode212 = new TreeNode(1);
		TreeNode treeNode312 = new TreeNode(2);
		TreeNode treeNode322 = new TreeNode(3);
		TreeNode treeNode432 = new TreeNode(4);
		TreeNode treeNode442 = new TreeNode(5);

		treeNode212.left = treeNode312;
		treeNode212.right = treeNode322;
		treeNode322.left = treeNode432;
		treeNode322.right = treeNode442;

		SubTree subTree = new SubTree();
		System.out.println(subTree.isSubtree(treeNode1, treeNode212));
		//System.out.println(subTree.priorSubtree(treeNode1,treeNode212));

	}


    /**
     * @param T1, T2: The roots of binary tree.
     * @return: True if T2 is a subtree of T1, or false.
     */
    public boolean isSubtree(TreeNode T1, TreeNode T2) {
        // write your code here
         boolean result  = false;
		// 如何child=NULL,则说明child已经到达叶子了,无论parent是否到达一个叶子节点,都应该返回真
		if (T2 == null) {
			return true;
		}
		// 首先,如果程序执行到这里,则child一定不是NULL,如果parent=NULL,则说明parent不包含child
		if (T1 == null) {
			return false;
		}

		if (T1.val == T2.val) {// 当if条件满足的时候,则继续递归判断它们的左子树和右子树是否相等,只有两者相等才返回真
		 result = isSubtreeDef(T1,T2);
		} 
		if(!result)
		{
			result= (isSubtree(T1.left, T2) || isSubtree(T1.right, T2));
		}
		return result;

	}

	public boolean isSubtreeDef(TreeNode T1, TreeNode T2) {
		// write your code here
		// 如何child=NULL,则说明child已经到达叶子了,无论parent是否到达一个叶子节点,都应该返回真
		if (T2 == null&&T1 == null) {
			return true;
		}
		if (T1!=null&&T2!=null&&T1.val == T2.val) {// 当if条件满足的时候,则继续递归判断它们的左子树和右子树是否相等,只有两者相等才返回真
			return (isSubtreeDef(T1.left, T2.left) && isSubtreeDef(T1.right, T2.right));
		} 
		return false;

	}

}

class TreeNode {
	public int val;
	public TreeNode left, right;

	public TreeNode(int val) {
		this.val = val;
		this.left = this.right = null;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了一些API来进行LDAP操作,可以使用JNDI(Java Naming and Directory Interface)来实现LDAP客户端。以下是一个简单的例子: 1. 导入必要的类和包: ```java import javax.naming.*; import javax.naming.directory.*; import java.util.Hashtable; ``` 2. 创建连接和进行身份认证: ```java Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389"); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=my-domain,dc=com"); env.put(Context.SECURITY_CREDENTIALS, "password"); DirContext ctx = new InitialDirContext(env); ``` 3. 查询LDAP: ```java SearchControls searchControls = new SearchControls(); searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); String baseDN = "dc=my-domain,dc=com"; String filter = "(objectclass=inetOrgPerson)"; NamingEnumeration<SearchResult> results = ctx.search(baseDN, filter, searchControls); while (results.hasMoreElements()) { SearchResult searchResult = results.nextElement(); Attributes attributes = searchResult.getAttributes(); Attribute attribute = attributes.get("cn"); String cn = (String) attribute.get(); System.out.println(cn); } ``` 这个例子只是演示了如何连接和查询LDAP,实际使用中可能需要进行更多的操作,比如添加、修改和删除条目等。可以根据具体需求来使用不同的API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值