您的位置:首页 > 其它

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

2012-04-10 21:54 302 查看
网上看到的一个题目: 给定一棵二叉树,以及两个节点,请找出它们最近的父节点。

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

用python写了一下,感觉还不坏:



class
node:
[align=left] def __init__( self , data, left, right):[/align]
[align=left] self .data = data[/align]
[align=left] self .left = left[/align]
[align=left] self .right = right[/align]
[align=left] [/align]
[align=left]def is_leaf(n):[/align]
[align=left] if n.left == None and n.right == None:[/align]
[align=left] return True[/align]
[align=left] return False[/align]
[align=left] [/align]
[align=left]def find_parent(n, data1, data2):[/align]
[align=left] if n == None :[/align]
[align=left] return 0[/align]
[align=left] [/align]
[align=left] if is_leaf(n):[/align]
[align=left] if n.data == data1:[/align]
[align=left] return 1[/align]
[align=left] elif n.data == data2:[/align]
[align=left] return 2[/align]
[align=left] else :[/align]
[align=left] return 0[/align]
[align=left] [/align]
[align=left] lr = find_parent(n.left, data1, data2)[/align]
[align=left] rr = find_parent(n.right, data1, data2)[/align]
[align=left] [/align]
[align=left] if lr + rr == 3:[/align]
[align=left] print "find node : " + str(n.data)[/align]
[align=left] [/align]
[align=left] return lr + rr[/align]
[align=left] [/align]
[align=left]def print_tree(t):[/align]
[align=left] if t == None :[/align]
[align=left] return[/align]
[align=left] [/align]
[align=left] print t.data[/align]
[align=left] print_tree(t.left)[/align]
[align=left] print_tree(t.right)[/align]
[align=left] [/align]
[align=left]tree = node(1, None, None )[/align]
[align=left]tree.left = node(2, None, None )[/align]
[align=left]tree.right = node(3, None, None )[/align]
[align=left]tree.left.left = node(4, None, None )[/align]
[align=left]tree.left.right = node(5, None, None )[/align]
[align=left]tree.left.left.left = node(6, None, None )[/align]
[align=left]tree.left.left.right = node(7, None, None )[/align]
[align=left]tree.right.left = node(8, None, None )[/align]
[align=left]tree.right.right = node(9, None, None )[/align]
[align=left] [/align]
[align=left]print_tree(tree)[/align]
[align=left]print "------------------"[/align]
[align=left]find_parent(tree, 7, 6)[/align]
[align=left]print "------------------"[/align]
[align=left]find_parent(tree, 7, 5)[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐