前序
vector<int> preorder_search(TreeNode* root)
{
if (root == NULL) return res;
TreeNod *node = root;
stack<TreeNode*> s;
while(node!=nullptr||!s.empty())
{
while(node!=nullptr)
{
/* operation of node */
s.push(node);
node = node->left;
}
if(!s.empty())
{
p = s.top();
s.pop();
node = node->right;
}
}
}
中序
vector<int> middle_search(TreeNode* root)
{
if (root == NULL) return res;
TreeNod *node = root, *pre_visited = nullptr;
stack<TreeNode*> s;
while(node!=nullptr||!s.empty())
{
while(node!=nullptr)
{
s.push(node);
node = node->left;
}
node = s.top();
if(node->right==nullptr||node->right==pre_visited)
{
/* operation of node */
s.pop();
pre_visited = node;
node = nullptr;
}
else
{
node = node->right;
}
}
}
冒泡
void Bubblesort(vector<int> &num)
{
if(num.empty())
return;
for(int i=0; i<num.size()-1; i++)
{
bool flag = true;
for(int j=0; j<num.size()-i; j++)
if(num[j]>num[j+1])
{
flag = false;
swap(num[j], num[j+1]);
}
if(flag)
break;
}
}
快排
void QuickSort(vector<int> &num, int start, int end)
{
if(num.size()<=1||end<=start)
return;
int base = start;
int left = base, right = end;
while(left<right)
{
/* 选最左元素为基准,要从右边开始 */
while(left<right&&num[right]>=num[base])
right--;
while(left<right&&num[left]<=num[base])
left++;
if(left==right)
{
swap(num[base], num[left]);
}
else
{
swap(num[left], num[right]);
}
}
QuickSort(num, start, left-1);
QuickSort(num, left+1, end);
}
直插
void InsertSort(vector<int> &num)
{
if(num.empty())
return;
for(int i=1; i<num.size(); i++)
{
int j = i;
while(j>0&&num[j]<num[j-1])
{
swap(num[j], num[j-1]);
j--;
}
}
}