我無法打印出我教授想要的格式的二叉搜索樹。二進制搜索樹toString
他的格式如下:
{(12,10,13),(10,8,11),(8,6,9),(6,4,7),(4,2,5),(2,1,3),(1,*,*),(3,*,*),(5,*,*),(7,*,*),(9,*,*),(11,*,*),(13,*,*)}
中的一個子集的第一個數字是根節點,和左,右節點是左,右的孩子。在循環迭代之後,左側子節點成爲根節點。一切正常,直到我到達一個子集中只存在一個節點的地方。它只是打印(1,*,*)直到最後,我無法弄清楚如何以另一種方式做到這一點。是否可以遞歸地執行此toString方法?
我的代碼:
public String toString()
{
if (root == null)
return "{}";
String str = "{";
Node tmp = root;
for (int i = 0; i < size; i++)
{
if (tmp.right != null && tmp.left == null)
str += "("+tmp.data+", "+tmp.right.data+", *)";
if (tmp.left != null && tmp.right == null)
str += "("+tmp.data+", "+tmp.left.data+", *)";
if (tmp.left == null && tmp.right == null)
str += "("+tmp.data+", *, *)";
else
str += "("+tmp.data+", "+tmp.left.data+", "+tmp.right.data+")";
if (tmp.left != null)
tmp = tmp.left;
}
return str += "}";
}
如果格式爲'(root,left,right)',那麼你應該翻轉'*'和'tmp.right.data '在第一個'if'語句中 –