判斷某棵二叉樹是否二叉排序樹
這是我首先想到的演算法:
bool Judge(PBinTree pbt)
{
PBinTreeNode pLeft, pRight;
bool bLeft = false, bRight=false, bRootl=false, bRootr=false;
if(pbt == NULL)
return true;
// 判斷根節點
pLeft = pbt->left;
pRight = pbt->right;
if(pLeft && pLeft->data <= pbt->data)
{
bRootl = true;
}
else
{
return false;
}
if(pRight && pRight->data >= pbt->data)
{
bRootr = true;
}
else
{
return false;
}
// 判斷左右子樹
bLeft = Judge(pLeft);
bRight = Judge(pRight);
// 同時滿足條件才叫二叉排序樹
return( bLeft && bRight && bRootl && bRootr);
}
但是不能處理
400
200 600
100 900 500 700
這樣的情況
應該是這樣的演算法
typedef struct node{
int data;
struct node *left, *right;
}NODE;
int judge(NODE *p, int leftbound, int rightbound) {
if (p==NULL) return 1;
if (p-> data < leftbound || p-> data > rightbound) return 0;//不要等號
if (!judge(p-> left,leftbound,p-> data)) return 0;
if (!judge(p-> right, p-> data,rightbound)) return 0;
return 1;
}
根值為value, 則左子樹值都小於根, 右子樹值大於根. 即左子樹值 (-maxint, value) 範圍內, 右子樹值在(value, maxint)範圍內.
呼叫為 judge(root,-maxint,maxint)
相關文章
- 判斷二叉樹是否為滿二叉樹二叉樹
- 【資料結構虛擬碼】設計判斷一棵二叉樹是否是二叉排序樹的演算法資料結構二叉樹排序演算法
- 建立一棵二叉排序樹排序
- LC49判斷二叉樹是否相等二叉樹
- 怎樣推斷一棵二叉樹是全然二叉樹二叉樹
- 【C++】判斷一顆二叉樹是否對稱C++二叉樹
- LeetCode題解(Offer26):判斷二叉樹A是否為二叉樹B的子樹(Python)LeetCode二叉樹Python
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉查詢樹(二叉排序樹)排序
- 採用層次遍歷判斷二叉樹為完全二叉樹二叉樹
- 二叉排序樹排序
- 【劍指offer】判斷二叉樹平衡二叉樹
- 刷題系列 - Python判斷是否映象對稱二叉樹Python二叉樹
- 《劍指offer》:[39-1]判斷是否為平衡二叉樹二叉樹
- 二叉樹的應用(1)--二叉樹排序樹基本操作二叉樹排序
- [Python手撕]判斷平衡二叉樹Python二叉樹
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- [Python手撕]判斷二叉搜尋樹Python
- JZ79 判斷是不是平衡二叉樹二叉樹
- js之排序二叉樹JS排序二叉樹
- 二叉排序樹 oj 2482排序
- 【筆記】二叉排序樹筆記排序
- 二叉排序樹(水題)排序
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 如何直觀形象地樹狀列印一棵二叉樹?二叉樹
- 二叉樹 & 二叉查詢樹二叉樹
- 二叉排序樹的實現排序
- C4top-是否完全二叉搜尋樹 (層次遍歷+完全判斷)
- 推斷二叉樹(進階)二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- LeetCode題解(Offer28):判斷二叉樹是否左右對稱(Python)LeetCode二叉樹Python
- 二叉排序樹BST及CRUD操作排序
- 手擼二叉樹——二叉查詢樹二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 二叉樹排序樹的建立,遍歷和刪除二叉樹排序
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹