二叉树,给定任意两个节点,寻找最近的父节点
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]
所谓最近,就是“血缘关系”最近啦,这个你懂得~~
用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]
相关文章推荐
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- LCA问题:求二叉树中任意两个节点的最近公共祖先
- 寻找二叉树中两个节点的最近的公共祖先
- 二叉树——查找两个任意节点的最近祖先
- 找出二叉树上任意两个节点的最近共同父节点
- 求二叉树的任意两个节点的最近公共祖先
- 二叉树中任意两个节点的最近公共祖先节点
- 二叉树——查找两个任意节点的最近祖先
- LeetCode—***寻找二叉树中任意两个节点之间的最大值Binary Tree Maximum Path Sum
- 寻找二叉树中两个节点的最近祖先
- 二叉树问题——寻找二叉树中两个节点的最近公共祖先
- 微软亚洲工程院面试题:寻找两个二叉树节点的最近祖先
- 寻找二叉树中两个节点的最近的公共祖先——迅雷笔试归来
- 寻找二叉树两个节点的最近公共祖先
- 在二叉树中,求任意两个节点的最近公共祖先(遍历的应用算法)
- 寻找二叉树中两个节点的最近的公共祖先
- [转] 寻找二叉树中两个节点的最近的公共祖先
- 任意一棵二叉树中最大距离的两个节点【算法】
- 【题目23】找出二叉树上任意两个结点的最近共同父结点
- [置顶] 寻找二叉树两节点的最近的公共祖先[转载+整理]