12.1-1
12.1-2
二叉搜索樹某一結點關鍵字大於等於它的左孩子關鍵字而小於等於它右孩子的關鍵字,最小堆則是某一結點關鍵字小於等於它左右孩子結點的關鍵字。
不能在
12.1-3
非遞歸排序在前面的第十章第四節有出現過,我就簡單的複製前面的代碼不做解釋。
#include <iostream>
#include <stack>
using std::cout;
using std::endl;
using std::stack;
struct binTree
{
int key;
binTree *left;
binTree *right;
};
void inorder(binTree *root) //中序遍歷
{
if(root != NULL)
{
inorder(root->left);
cout << root->key << ' ';
inorder(root->right);
}
}
void non_recursive_inorder(binTree *root)
{
stack<binTree *> ptr;
binTree *p = root;
while(p || !ptr.empty())
{
while(p) //一直找到最左孩子
{
ptr.push(p);
p = p->left;
}
if(!ptr.empty()) //出棧,然後向右子樹走
{
p = ptr.top();
cout << p->key << ' ';
ptr.pop();
p = p->right;
}
}
}
12.1-4
和二叉搜索樹差不多,先序就是輸出根的關鍵字在其子樹(子樹從左到右依次輸出)之前,後序就是輸出根的關鍵字在其子樹(子樹從左到右依次輸出)之後。
12.1-5
和12.1-2的說法有點類似,若基於比較的算法能夠在少於