|  | @@ -0,0 +1,60 @@
 | 
	
		
			
				|  |  | +package main
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import "fmt"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// Get the distance of two nodes in binary tree
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +var finalDist int
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func main() {
 | 
	
		
			
				|  |  | +	distOf(1, 12, 12)
 | 
	
		
			
				|  |  | +	fmt.Println(finalDist, 0)
 | 
	
		
			
				|  |  | +	distOf(1, 12, 6)
 | 
	
		
			
				|  |  | +	fmt.Println(finalDist, 1)
 | 
	
		
			
				|  |  | +	distOf(1, 4, 5)
 | 
	
		
			
				|  |  | +	fmt.Println(finalDist, 2)
 | 
	
		
			
				|  |  | +	distOf(1, 1, 11)
 | 
	
		
			
				|  |  | +	fmt.Println(finalDist, 3)
 | 
	
		
			
				|  |  | +	distOf(1, 5, 6)
 | 
	
		
			
				|  |  | +	fmt.Println(finalDist, 4)
 | 
	
		
			
				|  |  | +	distOf(1, 6, 9)
 | 
	
		
			
				|  |  | +	fmt.Println(finalDist, 5)
 | 
	
		
			
				|  |  | +	distOf(1, 8, 15)
 | 
	
		
			
				|  |  | +	fmt.Println(finalDist, 6)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//           __1__
 | 
	
		
			
				|  |  | +//         _/     \_
 | 
	
		
			
				|  |  | +//        /         \
 | 
	
		
			
				|  |  | +//      _2_         _3_
 | 
	
		
			
				|  |  | +//     /   \       /   \
 | 
	
		
			
				|  |  | +//    4     5     6     7
 | 
	
		
			
				|  |  | +//   / \   / \   / \   / \
 | 
	
		
			
				|  |  | +//  8   9 10 11 12 13 14 15
 | 
	
		
			
				|  |  | +func distOf(root, p, q int) int {
 | 
	
		
			
				|  |  | +	if p < root && q < root {
 | 
	
		
			
				|  |  | +		return -1
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	left := distOf(root*2, p, q) + 1
 | 
	
		
			
				|  |  | +	right := distOf(root*2+1, p, q) + 1
 | 
	
		
			
				|  |  | +	if left != 0 && right != 0 {
 | 
	
		
			
				|  |  | +		finalDist = left + right
 | 
	
		
			
				|  |  | +		return left
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if left != 0 {
 | 
	
		
			
				|  |  | +		if root == p || root == q {
 | 
	
		
			
				|  |  | +			finalDist = left
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return left
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if right != 0 {
 | 
	
		
			
				|  |  | +		if root == p || root == q {
 | 
	
		
			
				|  |  | +			finalDist = right
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return right
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	if root == p || root == q {
 | 
	
		
			
				|  |  | +		return 0
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return -1
 | 
	
		
			
				|  |  | +}
 |