判斷二叉查詢樹的三種方法

2021-07-16 10:28:00 字數 1321 閱讀 2692

實現乙個函式,判斷一棵二叉樹是否為二叉查詢樹。

我們知道一棵二叉查詢樹的中序遍歷序列是有序的,所以只需求出中序遍歷結果,再依次判斷該序列是否有序即可。

但是上述方法需要額外執行緒空間儲存遍歷結果,在此可以省去該空間開銷,只需乙個變數儲存訪問當前節點時上一節點的值即可。

本文還提供了另一種方法,基於left<=current

/*

題目描述

請實現乙個函式,檢查一棵二叉樹是否為二叉查詢樹。

給定樹的根結點指標treenode* root,請返回乙個bool,代表該樹是否為二叉查詢樹。

*/#include #include #include #include using namespace std;

/*二叉樹節點資料結構*/

struct treenode

};const int flag = int_max;

treenode *generatetree(vector&nums)

//定義非空右子樹

if (i + 1 < size && nums[i + 1] != flag)

tmp->left = left;

tmp->right = right;

//彈出當前處理的節點

que.pop();

} return root;

}class checker

bool checkbst1(treenode* root)

return true;

} /*方法

二、省掉線性空間,儲存遍歷的最後乙個節點*/

int lastval = int_min;

bool checkbst2(treenode* root)

/*方法三,最大最小值法*/

bool checkbst3(treenode* root)

bool checkbst3(treenode *root, int maxval, int minval) };

int main()

; treenode *root = generatetree(v);

checker c;

bool ret = c.checkbst1(root);

cout << ret << endl;

ret = c.checkbst2(root);

cout << ret << endl;

ret = c.checkbst3(root);

cout << ret << endl;

system("pause");

return 0;

}

判斷二叉平衡樹的三種方法

實現乙個函式,檢查二叉樹是否平衡。在這個問題中,平衡樹的定義如下,任意乙個節點,其兩顆子樹的高度差不超過1。判斷平衡二叉樹是乙個常見題目,一般來說,我們都是求出左右子樹的高度,根據定義判斷其差。下面給出三種實現方法,大家可以對比其優劣。題目描述 實現乙個函式,檢查二叉樹是否平衡,平衡的定義如下,對於...

二叉樹的三種遍歷方法

定義二叉樹 鏈式儲存 struct binarytreenode 順序儲存 struct binarytreenode 遞迴實現 先序遍歷 int preordertreewalk binarytreenode pnode 中序遍歷 int inordertreewalk binarytreenod...

二叉樹的三種遞迴方法

今天學習了二叉樹的知識學習了三種遍歷二叉樹的方法,雖然不知道後面兩種有什麼卵用,但還是講解一下 第一種 先序遍歷 1 先訪問其節點本身 2 訪問其左邊的子節點 3 再訪問其右邊的子節點。這種遍歷二叉樹的方法其實就是深搜,先訪問左邊一整條線的節點,就相當於搜尋迷宮時朝乙個方向一直走,直到不能走時再換乙...