见下面的二叉树。 并在此处查看此算法的实现:http://msdn.microsoft.com/en-us/library/ms379572(v=vs.80).aspx
1 level 0
2 3 level 1
4 5 6 7 level 2
8 9 10 11 12 13 14 15 level 3
我的问题是:如何根据级别从此树中发现子树?假设我想从15个编号的节点发现两个级别的子树。那么结果应该是
3
6 7
12 13 14 15
如果我搜索3层的树,那么它应该从1到15之间返回上面描述的完整树。
建议任何应该解决此问题的代码或算法或函数?
答案 0 :(得分:0)
假设Node类定义为:
public class Node
{
public Node Left { get; set; }
public Node Right { get; set; }
public int Value { get; set; }
public Node(int value)
{
Value = value;
}
}
您可以在此课程中添加以下两种方法,以实现您的目标:
public Node GetSubtree(int value, int depth)
{
int foundDepth;
return GetSubtreeHelper(value, depth, out foundDepth);
}
private Node GetSubtreeHelper(int value, int depth, out int foundDepth)
{
if (Value == value)
{
foundDepth = 0;
return depth == foundDepth ? this : null;
}
if (Left != null)
{
var node = Left.GetSubtreeHelper(value, depth, out foundDepth);
if (foundDepth != -1)
{
return ++foundDepth == depth ? this : node;
}
}
if (Right != null)
{
var node = Right.GetSubtreeHelper(value, depth, out foundDepth);
if (foundDepth != -1)
{
return ++foundDepth == depth ? this : node;
}
}
foundDepth = -1;
return null;
}
使用问题中的树进行测试:
GetSubtree(15, 0) = Node 15 GetSubtree(15, 1) = Node 7 GetSubtree(15, 2) = Node 3 GetSubtree(15, 3) = Node 1 GetSubtree(15, 4) = null