二叉树,给定任意两个节点,寻找最近的父节点

网上看到的一个题目: 给定一棵二叉树,以及两个节点,请找出它们最近的父节点。

所谓最近,就是“血缘关系”最近啦,这个你懂得~~

用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, NoneNone )
tree.left = node(2, NoneNone )
tree.right = node(3, NoneNone )
tree.left.left = node(4, NoneNone )
tree.left.right = node(5, NoneNone )
tree.left.left.left = node(6, NoneNone )
tree.left.left.right = node(7, NoneNone )
tree.right.left = node(8, NoneNone )
tree.right.right = node(9, NoneNone )
 
print_tree(tree)
print "------------------"
find_parent(tree, 7, 6)
print "------------------"
find_parent(tree, 7, 5)
posted @ 2012-04-10 21:54  ohscar  阅读(545)  评论(0编辑  收藏  举报