判斷一顆二叉樹是否為二叉搜尋樹
阿新 • • 發佈:2019-01-09
首先定義一個二叉樹的結構體
struct BinaryTree { int value; BinaryTree* lson; BinaryTree* rson; };
- 第一種方法
int maxOf(BinaryTree* root) { if (root->rson) { return maxOf(root->rson); } return root->value; } int minOf(BinaryTree* root) { if (root->lson) {
這裡有一個誤區:
// 錯誤程式碼 bool check(BinaryTree* root) { if (root == NULL) { return
反正我一開始是這樣想的,所以注意一下上面這種錯誤寫法。
- 第二種方法
int max = -2147483648; bool check(BinaryTree* root) { if (root == NULL) { return true; } if (!check(root->lson)) { return false; } if (max >= root->value) { return false; } return check(root->rson); }
這個程式碼就是一箇中序遍歷,如果value遞增,說明是一顆二叉搜尋樹,否則不是。當然max的初始值設定為-2147483648之後二叉樹中就不能出現-2147483648,否則會出錯。也可以把max型別改成long long之後用更小的數。