查詢排序二叉樹的最小值,最大值,Next指標,並逆序列印
給出一個排序二叉樹,求它的最小值,最大值,Next域
思路:一個排序二叉樹,如果要將它從小到大排序,只需要按照中序遍歷規則列印即可。那麼它的第一個元素就是它的最小值,而最後一個元素就是他的最大值。
最小值:
BstNode* First(BtNode* ptr)
{
while(ptr!=NULL&&ptr->left!=NULL)
{
ptr=ptr->left;
}
return ptr;
}
最大值:
BstNode* Last(BstNode* ptr)
{
while(ptr!=NULL&&ptr->right!=NULL)
{
ptr=ptr->right;
}
return ptr;
}
Next域:
BstNode* Next(BstNode* ptr)
{
if(ptr==NULL)//空樹,不做操作
{
return NULL;
}
if(ptr->right!=NULL)
{
//如果ptr的右孩子不為空,那麼就把它的右孩子看作另一顆樹的根節點,找到它的最小值,這個最小值就是ptr的下一個元素
return First(ptr->right);
}
else{
BstNode* pa=ptr->parent;//定義一個pa指向ptr的雙親
while(pa!=NULL&&pa->left!=ptr)//當他的雙親不為空並且雙親的左孩子不等於ptr時
{
ptr=pa;//ptr指向它的雙親
pa=pa->parent;//雙親指向它的雙親,一直到根節點為止
}
return pa;//當它的雙親不為空且雙親的左孩子等於ptr時,找到這個節點
}
}
利用上面的函式升序列印這棵樹
void NiceInOrder(BSTree& myt)
{
for(BstNode* p=First(myt.root);p!=NULL;p=Next(p))
{
cout<<p->data<<" ";
}
cout<<endl;
}
降序列印這棵樹
BstNode* Prev(BstNode* ptr)
{
if(ptr==NULL)
{
return NULL;
}
if(ptr->left!=NULL)
{
ptr=ptr->left;
}
else
{
BstNode* pa=ptr->parent;
while(pa!=NULL&&pa->right!=ptr)
{
ptr=pa;
pa=pa->parent;
}
return pa;
}
}
降序列印也就是逆序列印
void ResNiceInOrder(BstNode& myt)
{
for(BstNode* p=Last(Myt.root);p!=NULL;p=Prev(p))
{
cout<<p->data;
}
cout<<endl;
}
相關文章
- 二叉查詢樹【二叉排序樹】構建和查詢演算法 PHP 版排序演算法PHP
- 智慧指標和二叉樹(3):圖解查詢和刪除指標二叉樹圖解
- 二叉查詢樹
- 二叉查詢樹的插入刪除查詢
- 手擼二叉樹——二叉查詢樹二叉樹
- LeetCode 劍指offer——從上到下列印二叉樹 II、從上到下列印二叉樹 IIILeetCode二叉樹
- [劍指offer] 把二叉樹列印成多行二叉樹
- 平衡二叉查詢樹:紅黑樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- 第三章:查詢與排序(下)----------- 3.15基礎學習_樹、二叉樹、堆排序排序二叉樹
- 二叉樹路徑查詢二叉樹
- Amazing tree —— 二叉查詢樹
- 二叉查詢樹和笛卡爾樹
- Python 樹表查詢_千樹萬樹梨花開,忽如一夜春風來(二叉排序樹、平衡二叉樹)Python排序二叉樹
- 折半查詢排序樹畫圖和排序
- 二叉查詢樹(查詢、插入、刪除)——C語言C語言
- 5分鐘瞭解二叉樹之二叉查詢樹二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 二叉查詢樹概念及實現
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 排序二叉樹和平衡二叉樹排序二叉樹
- 【資料結構】查詢結構(二叉排序樹、ALV樹、雜湊技術雜湊表)資料結構排序
- 第三章:查詢與排序(下)----------- 3.14 逆序對個數排序
- 自上而下列印二叉樹二叉樹
- JavaScript實現簡單二叉查詢樹JavaScript
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- 【Algorithm&DataStructure】二叉查詢樹(BST)的遍歷GoASTStruct
- 刷題系列 - 在二叉樹中查詢給出節點,並返回以該節點為根的樹二叉樹
- LeetCode C++ 劍指 Offer 51. 陣列中的逆序對【歸併排序/樹狀陣列/線段樹】LeetCodeC++陣列排序
- 第 34 題:如何實現二叉查詢樹?
- 智慧指標和二叉樹(2):資源的自動管理指標二叉樹
- 二叉排序樹 oj 2482排序
- js之排序二叉樹JS排序二叉樹
- Python 查詢字典中最大最小值的keyPython
- 劍指 Offer 32 - I. 從上到下列印二叉樹(java解題)二叉樹Java
- 32 從上到下列印二叉樹二叉樹
- Kotlin 鏈式儲存的二叉樹中查詢節點Kotlin二叉樹