C++ 判斷二叉排序樹
阿新 • • 發佈:2019-01-14
#include <bits/stdc++.h> #define MaxSize 100 #define MIN -10000 #define TRUE 1 #define FALSE 0 #define ArrayLen(array) sizeof(array)/sizeof(array[0]) /* * Created by HarvestWu on 2018/07/25. */ using namespace std; //定義二叉樹結構 typedef struct BTNode { int key; struct BTNode *lchild; struct BTNode *rchild; } BTNode; //二叉排序樹關鍵字插入 int BSTInsert(BTNode *&bt, int key) { if (bt==NULL) { bt = (BTNode*)malloc(sizeof(BTNode)); bt->lchild = bt->rchild = NULL; bt->key = key; return TRUE; } else { if (key == bt->key) return FALSE; else if (key < bt->key) return BSTInsert(bt->lchild, key); else return BSTInsert(bt->rchild, key); } } //建立二叉排序樹 void CreateBST(BTNode *&bt, int key[], int n) { bt = NULL; for (int i = 0; i < n; ++i) BSTInsert(bt, key[i]); } //判斷二叉排序樹 int pre = MIN; int JudgeBST(BTNode *bt) { int flag1, flag2; if (bt == NULL) return TRUE; else { flag1 = JudgeBST(bt->lchild); if (flag1 == FALSE || pre > bt->key) return FALSE; pre = bt->key; flag2 = JudgeBST(bt->rchild); return flag2; } } int main() { BTNode *bt; int key[] = { 1, 5, 7, 6, 3, 4, 8, 9, 2 }; int n = ArrayLen(key); CreateBST(bt, key, n);//建立BST cout << endl << JudgeBST(bt) << endl;//判斷BST return 0; }