實現乙個函式,判斷一棵二叉樹是否為二叉查詢樹。
我們知道一棵二叉查詢樹的中序遍歷序列是有序的,所以只需求出中序遍歷結果,再依次判斷該序列是否有序即可。
但是上述方法需要額外執行緒空間儲存遍歷結果,在此可以省去該空間開銷,只需乙個變數儲存訪問當前節點時上一節點的值即可。
本文還提供了另一種方法,基於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 再訪問其右邊的子節點。這種遍歷二叉樹的方法其實就是深搜,先訪問左邊一整條線的節點,就相當於搜尋迷宮時朝乙個方向一直走,直到不能走時再換乙...