|  | @@ -0,0 +1,31 @@
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Definition for a binary tree node.
 | 
	
		
			
				|  |  | + * type TreeNode struct {
 | 
	
		
			
				|  |  | + *     Val int
 | 
	
		
			
				|  |  | + *     Left *TreeNode
 | 
	
		
			
				|  |  | + *     Right *TreeNode
 | 
	
		
			
				|  |  | + * }
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +func isSubtree(s *TreeNode, t *TreeNode) bool {
 | 
	
		
			
				|  |  | +	return postorder(s, t)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func postorder(s *TreeNode, t *TreeNode) bool {
 | 
	
		
			
				|  |  | +	if s == nil {
 | 
	
		
			
				|  |  | +		return s == t
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if postorder(s.Left, t) || postorder(s.Right, t) {
 | 
	
		
			
				|  |  | +		return true
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return isSametree(s, t)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func isSametree(s *TreeNode, t *TreeNode) bool {
 | 
	
		
			
				|  |  | +	if s == nil || t == nil {
 | 
	
		
			
				|  |  | +		return s == t
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if s.Val != t.Val {
 | 
	
		
			
				|  |  | +		return false
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return isSametree(s.Left, t.Left) && isSametree(s.Right, t.Right)
 | 
	
		
			
				|  |  | +}
 |