查找子树

package test;



public class Test2 {
	
	static class Node{
		int value = -1;
		Node lnext = null;
		Node rnext = null;
		public Node(int i){
			value = i;
		}
		
		@Override
		public String toString() {
			return value+"";
		}
	}		
	
	static boolean hasSubTree(Node r1, Node r2){
		boolean result = false;
		if(r1!=null && r2!=null){
			if(r1.value==r2.value){
				result=(dohas(r1.lnext, r2.lnext) && dohas(r1.rnext, r2.rnext));
				if(!result){
					result = hasSubTree(r1.lnext, r2);
				}
				if(!result){
					result = hasSubTree(r1.rnext, r2);
				}
			}
		}				
		return result;
	}
	
	static boolean dohas(Node r1, Node r2){
		if(r2==null) return true;
		if(r1==null) return false;
		if(r1.value == r2.value){
			if(dohas(r1.lnext, r2.lnext) && dohas(r1.rnext, r2.rnext)){
				return true;
			}else{
				return false;
			}
		}
		return false;
	}
	
	public static void main(String[] args) {		
		Node root1 = new Node(8);
		Node n1 = new Node(8);
		Node n2 = new Node(7);
		root1.lnext = n1;
		root1.rnext = n2;
		Node n3 = new Node(9);
		Node n4 = new Node(2);
		n1.lnext = n3;
		n1.rnext = n4;
		Node n5 = new Node(4);		
		Node n6 = new Node(7);
		n4.lnext = n5;
		n4.rnext = n6;
		
		
		Node root2 = new Node(8);
		Node n21 = new Node(9);
		Node n22 = new Node(2);
		root2.lnext = n21;
		root2.rnext = n22;
		
		System.out.println(hasSubTree(root1, root2));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值