我要檢查,如果樹是二叉搜索樹。我正在用一個臨時數組進行inorder遍歷來完成這項工作,該臨時數組收集這些值。我要檢查,如果數組是按升序排列,如果它是那麼我返回true:如何檢查一棵樹是否是BST?
bool myisBST(Node* node, std::vector<int> v);
bool myisBST(Node* node)
{
return myisBST(node, std::vector<int>());
}
bool myisBST(Node* node, std::vector<int> v)
{
if (node)
{
if (node->left)
return myisBST(node->left, v);
v.push_back(node->data);
if (node->right)
return myisBST(node->right, v);
}
return std::is_sorted(v.begin(), v.end());
}
當二叉樹是這樣的:
50
/\
25 75
/\ /\
1 12 62 -99
正如你所看到的,-99
使這不是一個二叉搜索樹,但它仍然返回true。我的實現有什麼問題嗎?
'-99'使它不是二叉查找樹,但它仍然返回true。你的實現有什麼問題嗎?你有沒有更好的人選可能是錯的? – juanchopanza 2014-12-01 21:25:42
@juanchopanza再來一次? – 2014-12-01 21:33:20
在調試器中運行你的程序,看看它需要什麼執行路徑。您的代碼嗟已排序檢查 – Vladimir 2014-12-01 21:34:17