假設節點類定義爲:
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
你指的是BST,還是隻是一個二叉樹?無論哪種方式,它都應該很容易。真正的問題是:如何找到節點的第N個父節點?該節點是您正在查找的子樹。你會如何找到節點的直接父節點? – Kobi
我指的是BST。但是哪個遍歷方法對於找到這個第N個父節點非常有用。或者你有任何算法? –
沒有人能在上面給出的庫中添加一個函數來滿足我的要求嗎? –