网上看到的一个题目: 给定一棵二叉树,以及两个节点,请找出它们最近的父节点。
所谓最近,就是“血缘关系”最近啦,这个你懂得~~
用python写了一下,感觉还不坏:
class node:
def __init__( self , data, left, right):
self .data = data
self .left = left
self .right = right
def is_leaf(n):
if n.left == None and n.right == None:
return True
return False
def find_parent(n, data1, data2):
if n == None :
return 0
if is_leaf(n):
if n.data == data1:
return 1
elif n.data == data2:
return 2
else :
return 0
lr = find_parent(n.left, data1, data2)
rr = find_parent(n.right, data1, data2)
if lr + rr == 3:
print "find node : " + str(n.data)
return lr + rr
def print_tree(t):
if t == None :
return
print t.data
print_tree(t.left)
print_tree(t.right)
tree = node(1, None, None )
tree.left = node(2, None, None )
tree.right = node(3, None, None )
tree.left.left = node(4, None, None )
tree.left.right = node(5, None, None )
tree.left.left.left = node(6, None, None )
tree.left.left.right = node(7, None, None )
tree.right.left = node(8, None, None )
tree.right.right = node(9, None, None )
print_tree(tree)
print "------------------"
find_parent(tree, 7, 6)
print "------------------"
find_parent(tree, 7, 5)