1.计算二叉树所有结点之和的算法:
void sum(BiTree* bt,int *sum){ //sum为节点之和
//1.base
if(bt==NULL) return;
//2.前序:增加当前节点的值
*sum+=bt->data;
//3.递归
sum(bt->lchild,sum);
sum(bt->rchild,sum);
}
2.将奇数排在偶数前面
/*
* 快速排序,将奇数排在偶数前面
* 参数说明:
* r[]:待排序数组
* s:起始下标
* t:结束下标
*/
void quickPass(int[]r,int s,int t){
int i=s; //左指针,从起始位置开始
int j=t;//右指针,从结束位置开始
int x=r[s];//选择起始位置作基准值
//2.遍历
while(i<j){
//2.1从右向左找到第一个奇数,循环结束时 r[j] 为奇数或者i==j
while(i<j&&r[j]%2==0) j--;
if(i<j){
//2.2将r[j]赋值给r[i]:找到的奇数放在前面
r[i]=r[j];
i++; //更新left指针位置
}
//3.1从左至右寻找第一个偶数,循环结束时r[i]为偶数
while(i<j&&r[i]%2==1) i++; //find偶数
if(i<j){
//替换
r[j]=r[i];
j--;//偶数放后面,偶数覆盖后面的值
}
}
//4.最后将基准值x放入最终位置
r[i]=x;
}
3.判断链表是否递增:
// 判断单链表中元素是否递增的函数
bool isListIncreasing(struct ListNode* head) {
// 如果链表为空或者只有一个节点,则一定是递增的
if (head == NULL || head->next == NULL) {
return true;
}
// 从头节点开始遍历链表
struct ListNode* current = head;
while (current->next != NULL) {
// 检查当前节点和下一个节点的值是否递增
if (current->value > current->next->value) {
return false; // 如果不是递增,则返回 false
}
current = current->next; // 移动到下一个节点继续检查
}
return true; // 链表中所有节点都是递增的情况下返回 true
}
4.判断是否为有效括号
class Solution {
public boolean isValid(String str) {
Stack<Character> left = new Stack<>();
for (char c : str.toCharArray()) {
if (c == '(' || c == '{' || c == '[')
left.push(c);
else // 字符 c 是右括号
if (!left.isEmpty() && leftOf(c) == left.peek())
left.pop();
else
// 和最近的左括号不匹配
return false;
}
// 是否所有的左括号都被匹配了
return left.isEmpty();
}
char leftOf(char c) {
if (c == '}') return '{';
if (c == ')') return '(';
return '[';
}
}
C语言问题:
bool IsBraCheck(char *str){
//1.初始化栈
InitStack(S);
int i=0;
while(str[i]!='\0'){
//1.左括号则压入栈中
switch(str[i]){
case '(': Push(S,'('); break;
case '{': Push(S,'{'); break;
case '[': Push(S,'['); break;
//2.右括号
case ')': Pop(S,e);
if(e!='(') return false;
break;
case ']': Pop(S,e);
if(e!='[') return false;
break;
case '}': Pop(S,e);
if(e!='{') return false;
break;
}
i++;
}
return IsEmpty(S)?true:false;
}